Guest User

LineMiner

a guest
Jun 9th, 2013
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.51 KB | None | 0 0
  1.  
  2. --SETTINGS DEFAULTS
  3. local stop=false
  4. local settings={}
  5. settings["miningTime"]=5
  6. settings["digDelay"]=1
  7. settings["reserveFuelLevel"]=10
  8. settings["chargeTime"]=30
  9. settings["debug"]=false
  10. settings["blocksToTravel"]=0
  11. settings["blocksTraveled"]=0
  12. settings["rowsToTravel"]=0
  13. settings["rowsTraveled"]=0
  14. settings["blocksMined"]=0
  15. local nextStep=nil
  16. settings["turning"]="left"
  17. settings["midTurn"]=false
  18.  
  19. --CONSTANTS
  20. local cNone=0
  21. local cLeft=1
  22. local cYes=2
  23. local cNo=3
  24. local cPowerDown=4
  25. local cPowerUp=5
  26. local cForward=6
  27. local cReadyCharge=7
  28. local cComplete=8
  29. local cGoHome=9
  30. local cRight=10
  31. local cReboot=11
  32. local cShutdown=12
  33. local cClearSettings=13
  34. local cNeedFuel=14
  35. local cPairing=15
  36.  
  37.  
  38. function loadSettings()
  39.    local file = fs.open("SnapBoxSettings","r")
  40.    local data = file.readAll()
  41.    file.close()
  42.    settings=textutils.unserialize(data)
  43. end
  44.  
  45. function saveSettings()
  46.     local file = fs.open("SnapBoxSettings","w")
  47.     file.write(textutils.serialize(settings))
  48.     file.close()
  49. end
  50.  
  51. function checkStatus()
  52.     if turtle.getItemCount(1)>0 then
  53.         print("Ender Chest OK")
  54.     else
  55.         print("Please insert an Ender Chest into slot 1")
  56.         while turtle.getItemCount(1)==0 do
  57.             turtle.select(1)
  58.             sleep(0.1)
  59.         end
  60.     end
  61.     if turtle.getItemCount(2)>0 then
  62.         print("Mining Well OK")
  63.     else
  64.         print("Please insert Mining Well into slot 2")
  65.         while turtle.getItemCount(2)==0 do
  66.             turtle.select(2)
  67.             sleep(0.1)
  68.         end
  69.     end
  70.     if turtle.getFuelLevel()~="unlimited" then
  71.         if turtle.getItemCount(3)>0 then
  72.             print("Charge Station OK")
  73.         else
  74.             print("Please insert Advanced Charge Station (or higher) into slot 3")
  75.             while turtle.getItemCount(3)==0 do
  76.                 turtle.select(3)
  77.                 sleep(0.1)
  78.             end
  79.         end
  80.     end
  81.     if turtle.getItemCount(4)>0 then
  82.         print("Solar Panel OK")
  83.     else
  84.         print("Please insert Ultimate Hybrid Solar Panel into slot 4")
  85.         while turtle.getItemCount(4)==0 do
  86.             turtle.select(4)
  87.             sleep(0.1)
  88.         end
  89.     end
  90.     if turtle.getItemCount(5)>0 then
  91.         print("IC2 Consumer OK")
  92.     else
  93.         print("Please insert IC2 HV Consumer into slot 5")
  94.         while turtle.getItemCount(5)==0 do
  95.             turtle.select(5)
  96.             sleep(0.1)
  97.         end
  98.     end
  99.     if turtle.getItemCount(6)>0 then
  100.         print("Energy Bridge OK")
  101.     else
  102.         print("Please insert Energy Bridge into slot 6")
  103.         while turtle.getItemCount(6)==0 do
  104.             turtle.select(6)
  105.             sleep(0.1)
  106.         end
  107.     end
  108.     if turtle.getItemCount(7)>0 then
  109.         print("BC Producer OK")
  110.     else
  111.         print("Please insert BC Producer into slot 7")
  112.         while turtle.getItemCount(7)==0 do
  113.             turtle.select(7)
  114.             sleep(0.1)
  115.         end
  116.     end
  117.     if needsFuel() then
  118.         if turtle.getItemCount(16)>0 then
  119.             print("Fuel Level OK")
  120.         else
  121.             print("Please insert fuel in slot 16")
  122.             while turtle.getItemCount(16)==0 do
  123.                 turtle.select(16)
  124.                 sleep(0.1)
  125.             end
  126.         end
  127.     end
  128.  
  129. end
  130.  
  131. function needsFuel()
  132.     local level=turtle.getFuelLevel()
  133.     if level=="unlimited" or level>settings["reserveFuelLevel"] then
  134.         return false
  135.     else
  136.         return true
  137.     end
  138. end
  139.  
  140. function moveForward()
  141.     while turtle.detect() do
  142.         turtle.dig()
  143.         sleep(settings["digDelay"])
  144.     end
  145.     while turtle.forward()==false do
  146.         turtle.dig()
  147.         sleep(settings["digDelay"])
  148.         turtle.attack()
  149.     end
  150. end
  151.  
  152. function topOff()
  153.     if needsFuel()==true then
  154.         setNextStep("chargeplacecharge")
  155.     else
  156.         setNextStep("placeminingwell")
  157.     end
  158. end
  159.  
  160. function placeCharge()
  161.     turtle.select(4)
  162.     while turtle.placeDown()==false do
  163.         turtle.digDown()
  164.         sleep(settings["digDelay"])
  165.         turtle.attackDown()
  166.     end
  167.     turtle.back()
  168.     turtle.select(5)
  169.     while turtle.placeDown()==false do
  170.         turtle.digDown()
  171.         sleep(settings["digDelay"])
  172.         turtle.attackDown()
  173.     end
  174.     turtle.back()
  175.     turtle.select(6)
  176.     while turtle.placeDown()==false do
  177.         turtle.digDown()
  178.         sleep(settings["digDelay"])
  179.         turtle.attackDown()
  180.     end
  181.     turtle.back()
  182.     turtle.select(7)
  183.     while turtle.placeDown()==false do
  184.         turtle.digDown()
  185.         sleep(settings["digDelay"])
  186.         turtle.attackDown()
  187.     end
  188.     turtle.back()
  189.     turtle.select(3)
  190.     while turtle.placeDown()==false do
  191.         turtle.digDown()
  192.         sleep(settings["digDelay"])
  193.         turtle.attackDown()
  194.     end
  195. end
  196.  
  197. function digCharge()
  198.     turtle.select(3)
  199.     turtle.dig()
  200.     turtle.forward()
  201.     turtle.select(7)
  202.     turtle.dig()
  203.     turtle.forward()
  204.     turtle.select(6)
  205.     turtle.dig()
  206.     turtle.forward()
  207.     turtle.select(5)
  208.     turtle.dig()
  209.     turtle.forward()
  210.     turtle.select(4)
  211.     turtle.dig()
  212. end
  213.  
  214. function placeChest()
  215.     turtle.select(1)
  216.     turtle.back()
  217.     while turtle.place()==false do
  218.         turtle.attack()
  219.         turtle.dig()
  220.         sleep(settings["digDelay"])
  221.     end
  222. end
  223.  
  224. function digChest()
  225.     turtle.select(1)
  226.     if turtle.getItemCount(1) > 0 then
  227.         turtle.drop()
  228.     end
  229.     turtle.dig()
  230.     turtle.forward()
  231. end
  232.  
  233. function placeMiningWell()
  234.     turtle.select(2)
  235.     while turtle.placeDown()==false do
  236.         turtle.digDown()
  237.         sleep(settings["digDelay"])
  238.         turtle.attackDown()
  239.     end
  240. end
  241.  
  242. function digMiningWell()
  243.     turtle.select(2)
  244.     if turtle.getItemCount(2) > 0 then
  245.         turtle.drop()
  246.     end
  247.     turtle.digDown()
  248. end
  249.  
  250. function setNextStep(next)
  251.     if debug==true then
  252.         print("Set next step "..next)
  253.     end
  254.     local file=nil
  255.     while file==nil do
  256.        file=fs.open("SnapBoxStepTracker","w")
  257.     end
  258.     file.write(next)
  259.     file.close()
  260.     nextStep=next
  261. end
  262.  
  263. function getNextStep()
  264.     local file=fs.open("SnapBoxStepTracker","r")
  265.     if file==nil then
  266.         setNextStep("topoff")
  267.     else
  268.         local returnValue=file.readAll()
  269.         file.close()
  270.         setNextStep(returnValue)
  271.     end
  272. end
  273.  
  274. function powerUp()
  275.     turtle.select(4)
  276.     turtle.digDown()
  277.     while turtle.forward()==false do
  278.         sleep(0.1)
  279.     end
  280.     turtle.select(5)
  281.     turtle.digDown()
  282.     while turtle.forward()==false do
  283.         sleep(0.1)
  284.     end
  285.     turtle.select(6)
  286.     turtle.digDown()
  287.     while turtle.forward()==false do
  288.         sleep(0.1)
  289.     end
  290.     turtle.select(7)
  291.     turtle.digDown()
  292. end
  293.  
  294. function powerDown()
  295.     turtle.select(7)
  296.     while turtle.placeDown()==false and turtle.getItemCount(7)>0 do
  297.         turtle.digDown()
  298.         sleep(settings["digDelay"])
  299.         turtle.attackDown()
  300.         sleep(0.1)
  301.     end
  302.     while turtle.back()==false do
  303.         turtle.digDown()
  304.         sleep(settings["digDelay"])
  305.         turtle.attackDown()
  306.         sleep(0.1)
  307.     end
  308.     turtle.select(6)
  309.     while turtle.placeDown()==false and turtle.getItemCount(6)>0 do
  310.         turtle.digDown()
  311.         sleep(settings["digDelay"])
  312.         turtle.attackDown()
  313.         sleep(0.1)
  314.     end
  315.     while turtle.back()==false do
  316.         turtle.digDown()
  317.         sleep(settings["digDelay"])
  318.         turtle.attackDown()
  319.         sleep(0.1)
  320.     end
  321.     turtle.select(5)
  322.     while turtle.placeDown()==false and turtle.getItemCount(5)>0 do
  323.         turtle.digDown()
  324.         sleep(settings["digDelay"])
  325.         turtle.attackDown()
  326.         sleep(0.1)
  327.     end
  328.     while turtle.back()==false do
  329.         turtle.digDown()
  330.         sleep(settings["digDelay"])
  331.         turtle.attackDown()
  332.         sleep(0.1)
  333.     end
  334.     turtle.select(4)
  335.     while turtle.placeDown()==false and turtle.getItemCount(4)>0 do
  336.         turtle.digDown()
  337.         sleep(settings["digDelay"])
  338.         turtle.attackDown()
  339.         sleep(0.1)
  340.     end
  341. end
  342.  
  343. function checkResume()
  344.     local file=fs.open("SnapBoxStepTracker","r")
  345.     if file==nil then
  346.         return false
  347.     else
  348.         file.close()
  349.         return true
  350.     end
  351. end
  352.  
  353. function doNextStep()
  354. --is there a better way to do this?
  355.     if nextStep=="topoff" then
  356.         topOff()
  357.     elseif nextStep=="chargeplacecharge" then
  358.         placeCharge()
  359.         setNextStep("chargewaitforrefuel")
  360.     elseif nextStep=="chargewaitforrefuel" then
  361.         sleep(settings["chargeTime"])
  362.         setNextStep("chargedigcharge")
  363.     elseif nextStep=="chargedigcharge" then
  364.         digCharge()
  365.         setNextStep("placeminingwell")
  366.     elseif nextStep=="placeminingwell" then
  367.         placeMiningWell()
  368.         setNextStep("placechest")
  369.     elseif nextStep=="placechest" then
  370.         placeChest()
  371.         setNextStep("powerdown")
  372.     elseif nextStep=="powerdown" then
  373.         powerDown()
  374.         setNextStep("powerup")
  375.         sleep(settings["miningTime"])
  376.     elseif nextStep=="powerup" then
  377.         powerUp()
  378.         setNextStep("digchest")
  379.     elseif nextStep=="digchest" then
  380.         digChest()
  381.         setNextStep("digminingwell")
  382.     elseif nextStep=="digminingwell" then
  383.         digMiningWell()
  384.         setNextStep("moveforward")
  385.     elseif nextStep=="moveforward" then
  386.         moveForward()
  387.         setNextStep("topoff")
  388.     else
  389.         print("Unknown Step - Something Went Wrong. Giving Up "..nextStep)
  390.         return
  391.     end
  392. end
  393.  
  394. function clearScreen()
  395.     term.clear()
  396.     term.setCursorPos(1,1)
  397. end
  398.  
  399. --------MAIN PROGRAM
  400. clearScreen()
  401.  
  402. if checkResume()==false then
  403.     --check to make sure it has all the items it needs
  404.     checkStatus()
  405.  
  406.     --initial refuel
  407.     turtle.select(16)
  408.     turtle.refuel()
  409.     turtle.select(1)
  410.  
  411.     nextStep="topoff"
  412.     saveSettings()
  413. else
  414.     loadSettings()
  415.     getNextStep()
  416. end
  417.  
  418. --main loop
  419. while stop==false do
  420.     doNextStep()
  421.     sleep(0.2)
  422. end
Advertisement
Add Comment
Please, Sign In to add comment