exploder2013

Mining Turtle - Self-saving miner

Feb 10th, 2013
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.34 KB | None | 0 0
  1. -- Only for test purposes right now.
  2.  
  3. w,h = term.getSize()
  4.  
  5. function printCenter(string,ypos) -- Prints text on center of the screen.
  6.   if ypos == nil then
  7.     x,y = term.getCursorPos()
  8.     term.setCursorPos(w/2 - #string/2, y+1)
  9.     term.write(string)
  10.   else
  11.     term.setCursorPos(w/2 - #string/2, ypos)
  12.     term.write(string)
  13.   end
  14. end
  15.  
  16.  
  17. function decoration() -- Decoration on main menu.
  18.   for i=1,h do
  19.     term.setCursorPos(1,i)
  20.     term.write(":")
  21.   end
  22.   term.setCursorPos(2,1)
  23.   term.write(string.rep("-",w-1))
  24.   term.setCursorPos(2,h)
  25.   term.write(string.rep("-",w-1))
  26.   for i=1,h do
  27.     term.setCursorPos(w,i)
  28.     term.write(":")
  29.   end
  30. end
  31.  
  32. function fuel() -- Displaying fuel level on main menu.
  33.   tText = "Fuel Level: "
  34.   tFuel = tostring(turtle.getFuelLevel())
  35.   term.setCursorPos(w - #tFuel - #tText - 2,h - 1)
  36.   term.write(tText)
  37.   term.write(tFuel)
  38. end
  39.  
  40. function mainMenu() -- Main menu.
  41.   term.clear()
  42.   decoration()
  43.   fuel()
  44.   printCenter("Miner V0.2",2)
  45.   printCenter("[Enter] - Start to mine.",h/2)
  46.   printCenter("[E] - Exit",h/2 + 2)
  47.   while true do
  48.     event, p1 = os.pullEvent()
  49.     if event == "key" and p1 == keys.enter then
  50.          running = 1
  51.          savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  52.          os.reboot()
  53.     elseif event == "key" and p1 == keys.e then
  54.       term.clear()
  55.       term.setCursorPos(1,1)
  56.       error()
  57.     end
  58.     end
  59.   end
  60.  
  61. function checkPos() -- Loads all cords(if they exist).
  62.   if not fs.exists("mine/cords") then
  63.     local file = fs.open("mine/cords","a")
  64.     file.close()
  65.   end
  66.   local file = fs.open("mine/cords","r")
  67.   line = file.readLine()
  68.   if line == nil then line = 0 end
  69.   turtleX = tonumber(line)
  70.   line = file.readLine()
  71.   if line == nil then line = 0 end
  72.   turtleY = tonumber(line)
  73.   line = file.readLine()
  74.   if line == nil then line = 0 end
  75.   running = tonumber(line)
  76.   line = file.readLine()
  77.   if line == nil then line = 0 end
  78.   times = tonumber(line)
  79.   line = file.readLine()
  80.   if line == nil then line = 1 end
  81.   tForw = tonumber(line)
  82.   line = file.readLine()
  83.   if line == nil then line = "front" end
  84.   tSide = line
  85.   line = file.readLine()
  86.   if line == nil then line = 0 end
  87.   dig = tonumber(line)
  88.   file.close()
  89. end
  90.  
  91. function savePos(x,y,running,times,tForw,tSide,dig) -- Saves all cords.
  92.   local file = fs.open("mine/cords","w")
  93.   file.write(x)
  94.   file.write("\n")
  95.   file.write(y)
  96.   file.write("\n")
  97.   file.write(running)
  98.   file.write("\n")
  99.   file.write(times)
  100.   file.write("\n")
  101.   file.write(tForw)
  102.   file.write("\n")
  103.   file.write(tSide)
  104.   file.write("\n")
  105.   file.write(dig)
  106.   file.close()
  107. end
  108.  
  109. function tForward() -- Moves forward.
  110.   for i=1,tForw do
  111.     turtleX = turtleX + 1
  112.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  113.     if not turtle.forward() then
  114.       turtle.dig()
  115.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  116.       turtle.forward()
  117.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  118.     end
  119.   end
  120.   tForw = tForw + 1
  121.   savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  122. end
  123.  
  124.  
  125. function tDown() -- Digs down.
  126.   dig = 1
  127.   savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  128.   bottom = false
  129.   repeat
  130.     turtle.digDown()
  131.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  132.    
  133.     if not turtle.down() then
  134.       dig = 0
  135.       turtleY = turtleY - 1
  136.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  137.       bottom = true
  138.     end
  139.    
  140.     turtleY = turtleY + 1
  141.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  142.    
  143.     -- Checking for sides
  144.     if tSide == "front" then
  145.       tSide = "left"
  146.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  147.       turtle.turnLeft()
  148.       turtle.dig()
  149.       tSide = "front"
  150.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  151.       turtle.turnRight()
  152.       tSide = "right"
  153.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  154.       turtle.turnRight()
  155.       turtle.dig()
  156.       tSide = "front"
  157.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  158.       turtle.turnLeft()
  159.     elseif tSide == "left" then
  160.       tSide = "front"
  161.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  162.       turtle.turnRight()
  163.     elseif tSide == "right" then
  164.       tSide = "front"
  165.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  166.       turtle.turnLeft()
  167.     end
  168.   until bottom == true
  169.     end
  170.  
  171. function tUp() -- Get's back up to surface.
  172.   if turtleY <= 0 then
  173.     return
  174.   else
  175.     repeat
  176.       turtleY = turtleY - 1
  177.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  178.       if not turtle.up() then
  179.         turtle.digUp()
  180.         turtle.up()
  181.       end
  182.     until turtleY == 0
  183.   end
  184. end
  185.  
  186. function checkSide() -- Checks if turtle is facing front.
  187.   if tSide == "front" then
  188.       return
  189.     elseif tSide == "left" then
  190.           turtle.dig()
  191.       tSide = "front"
  192.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  193.       turtle.turnRight()
  194.     elseif tSide == "right" then
  195.           turtle.dig()
  196.       tSide = "front"
  197.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  198.       turtle.turnLeft()
  199.     end
  200. end
  201.  
  202. function tBack() -- Returns up to surface.
  203.   if turtleX <= 0 then
  204.     return
  205.   else
  206.     repeat
  207.      
  208.       turtleX = turtleX - 1
  209.       savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  210.       turtle.back()
  211.     until turtleX == 0
  212.   end
  213. end
  214.  
  215. function tDrop() -- Drops materials inside chest.
  216.   for i=1,16 do
  217.     turtle.select(i)
  218.     turtle.dropDown()
  219.   end
  220. end
  221.  
  222. fs.makeDir("mine")
  223. checkPos()
  224. checkSide()
  225. sleep(1)
  226.  
  227. if dig == 1 then -- Checks if turtle finished it's tDown function before chunks unloaded.
  228.   checkSide()
  229.   tDown()
  230. end
  231.  
  232. if times ~= 10 then -- Turtle should loop this 10 times when first started.
  233.   if running == 1 then
  234.   repeat
  235.     tUp()
  236.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  237.     tBack()
  238.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  239.     tDrop()
  240.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  241.     tForward()
  242.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  243.     times = times + 1
  244.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  245.     tDown()
  246.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  247.     tUp()
  248.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  249.     tBack()
  250.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  251.     tDrop()
  252.     savePos(turtleX,turtleY,running,times,tForw,tSide,dig)
  253.   until times >= 10
  254.   fs.delete("mine")
  255.   else
  256.   term.clear()
  257.   mainMenu()
  258.     end
  259.   end
Advertisement
Add Comment
Please, Sign In to add comment