dxbydt

Miner

Jun 11th, 2013
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. --SETTINGS DEFAULTS
  3. local stop=false
  4. local settings={}
  5. settings["miningTime"]=4
  6. settings["digDelay"]=1
  7. settings["reserveFuelLevel"]=10
  8. settings["chargeTime"]=30
  9. settings["debug"]=false
  10. local nextStep=nil
  11.  
  12. function loadSettings()
  13.    local file = fs.open("SnapBoxSettings","r")
  14.    local data = file.readAll()
  15.    file.close()
  16.    settings=textutils.unserialize(data)
  17. end
  18.  
  19. function saveSettings()
  20.     local file = fs.open("SnapBoxSettings","w")
  21.     file.write(textutils.serialize(settings))
  22.     file.close()
  23. end
  24.  
  25. function cleanUp()
  26.     if nextStep=="chargeplacecharge" or nextStep=="chargedigcharge" then
  27.         if settings["debug"]==true then
  28.             print("charge deployed")
  29.         end
  30.         if turtle.getItemCount(3)==0 then
  31.             if settings["debug"]==true then
  32.                 print("Fully deployed")
  33.             end
  34.             digCharge()
  35.         elseif turtle.getItemCount(7)==0 then
  36.             if settings["debug"]==true then
  37.                 print("bc producer deployed")
  38.             end
  39.             if turtle.detectDown()==false then
  40.                 if settings["debug"]==true then
  41.                     print("moving down one")
  42.                 end
  43.                 turtle.down()
  44.             end
  45.             turtle.select(7)
  46.             turtle.digDown()
  47.             turtle.down()
  48.             turtle.select(6)
  49.             turtle.digDown()
  50.             turtle.down()
  51.             turtle.select(5)
  52.             turtle.digDown()
  53.             turtle.forward()
  54.             turtle.select(4)
  55.             turtle.digDown()
  56.         elseif turtle.getItemCount(6)==0 then
  57.             if settings["debug"]==true then
  58.                 print("Energy bridge deployed")
  59.             end
  60.             if turtle.detectDown()==false then
  61.                 if settings["debug"]==true then
  62.                     print("moving down one")
  63.                 end
  64.                 turtle.down()
  65.             end
  66.             turtle.select(6)
  67.             turtle.digDown()
  68.             turtle.down()
  69.             turtle.select(5)
  70.             turtle.digDown()
  71.             turtle.forward()
  72.             turtle.select(4)
  73.             turtle.digDown()
  74.         elseif turtle.getItemCount(5)==0 then
  75.             if settings["debug"]==true then
  76.                 print("IC2 consumer deployed")
  77.             end
  78.             if turtle.detectDown()==false then
  79.                 if settings["debug"]==true then
  80.                     print("moving down one")
  81.                 end
  82.                 turtle.down()
  83.             end
  84.             turtle.select(5)
  85.             turtle.digDown()
  86.             turtle.forward()
  87.             turtle.select(4)
  88.             turtle.digDown()
  89.         elseif turtle.getItemCount(4)==0 then
  90.             if settings["debug"]==true then
  91.                 print("solar panel deployed")
  92.             end
  93.             if turtle.detectDown()==false then
  94.                 if settings["debug"]==true then
  95.                     print("moving forward one")
  96.                 end
  97.                 turtle.forward()
  98.             end
  99.             turtle.select(4)
  100.             turtle.digDown()
  101.         end
  102.         digChest()
  103.         digMiningWell()
  104.     elseif nextStep=="chargewaitforrefuel" then
  105.         digCharge()
  106.         digChest()
  107.         digMiningWell()
  108.     elseif nextStep=="placeminingwell" or nextStep=="digminingwell" then
  109.         if turtle.getItemCount(2)==0 then
  110.             digMiningWell()
  111.         end
  112.     elseif nextStep=="placechest" or nextStep=="digchest" then
  113.         if turtle.getItemCount(1)==0 then
  114.             digChest()
  115.         end
  116.         digMiningWell()
  117.     elseif nextStep=="powerdown" or nextStep=="powerup" then
  118.         if settings["debug"]==true then
  119.             print("power deployed")
  120.         end
  121.         if turtle.getItemCount(4)==0 then
  122.             if settings["debug"]==true then
  123.                 print("fully deployed")
  124.             end
  125.             digCharge()
  126.         elseif turtle.getItemCount(5)==0 then
  127.             if settings["debug"]==true then
  128.                 print("IC2 deployed")
  129.             end
  130.             if turtle.detectDown()==false then
  131.                 if settings["debug"]==true then
  132.                     print("moving down one")
  133.                 end
  134.                 turtle.down()
  135.             end
  136.             turtle.select(7)
  137.             turtle.digDown()
  138.             turtle.down()
  139.             turtle.select(6)
  140.             turtle.digDown()
  141.             turtle.down()
  142.             turtle.select(5)
  143.             turtle.digDown()
  144.         elseif turtle.getItemCount(6)==0 then
  145.             if settings["debug"]==true then
  146.                 print("energy bridge deployed")
  147.             end
  148.             if turtle.detectDown()==false then
  149.                 if settings["debug"]==true then
  150.                     print("moving down one")
  151.                 end
  152.                 turtle.down()
  153.             end
  154.             turtle.select(6)
  155.             turtle.digDown()
  156.             turtle.down()
  157.             turtle.select(5)
  158.             turtle.digDown()
  159.         elseif turtle.getItemCount(7)==0 then
  160.             if settings["debug"]==true then
  161.                 print("bc deployed")
  162.             end
  163.             if turtle.detectDown()==false then
  164.                 if settings["debug"]==true then
  165.                     print("moving down one")
  166.                 end
  167.                 turtle.down()
  168.             end
  169.             turtle.select(5)
  170.             turtle.digDown()
  171.         end
  172.         digChest()
  173.         digMiningWell()
  174.     end
  175.     if settings["debug"]==true then
  176.         print("finished cleanup")
  177.     end
  178.     setNextStep("topoff")
  179. end
  180.  
  181. function checkStatus()
  182.     if turtle.getItemCount(1)>0 then
  183.         print("Ender Chest OK")
  184.     else
  185.         print("Please insert an Ender Chest into slot 1")
  186.         while turtle.getItemCount(1)==0 do
  187.             turtle.select(1)
  188.             sleep(0.1)
  189.         end
  190.     end
  191.     if turtle.getItemCount(2)>0 then
  192.         print("Mining Well OK")
  193.     else
  194.         print("Please insert Mining Well into slot 2")
  195.         while turtle.getItemCount(2)==0 do
  196.             turtle.select(2)
  197.             sleep(0.1)
  198.         end
  199.     end
  200.     if turtle.getFuelLevel()~="unlimited" then
  201.         if turtle.getItemCount(3)>0 then
  202.             print("Charge Station OK")
  203.         else
  204.             print("Please insert Advanced Charge Station (or higher) into slot 3")
  205.             while turtle.getItemCount(3)==0 do
  206.                 turtle.select(3)
  207.                 sleep(0.1)
  208.             end
  209.         end
  210.     end
  211.     if turtle.getItemCount(4)>0 then
  212.         print("Solar Panel OK")
  213.     else
  214.         print("Please insert Ultimate Hybrid Solar Panel into slot 4")
  215.         while turtle.getItemCount(4)==0 do
  216.             turtle.select(4)
  217.             sleep(0.1)
  218.         end
  219.     end
  220.     if turtle.getItemCount(5)>0 then
  221.         print("IC2 Consumer OK")
  222.     else
  223.         print("Please insert IC2 HV Consumer into slot 5")
  224.         while turtle.getItemCount(5)==0 do
  225.             turtle.select(5)
  226.             sleep(0.1)
  227.         end
  228.     end
  229.     if turtle.getItemCount(6)>0 then
  230.         print("Energy Bridge OK")
  231.     else
  232.         print("Please insert Energy Bridge into slot 6")
  233.         while turtle.getItemCount(6)==0 do
  234.             turtle.select(6)
  235.             sleep(0.1)
  236.         end
  237.     end
  238.     if turtle.getItemCount(7)>0 then
  239.         print("BC Producer OK")
  240.     else
  241.         print("Please insert BC Producer into slot 7")
  242.         while turtle.getItemCount(7)==0 do
  243.             turtle.select(7)
  244.             sleep(0.1)
  245.         end
  246.     end
  247.     if needsFuel() then
  248.         if turtle.getItemCount(16)>0 then
  249.             print("Fuel Level OK")
  250.         else
  251.             print("Please insert fuel in slot 16")
  252.             while turtle.getItemCount(16)==0 do
  253.                 turtle.select(16)
  254.                 sleep(0.1)
  255.             end
  256.         end
  257.     end
  258.  
  259. end
  260.  
  261. function needsFuel()
  262.     local level=turtle.getFuelLevel()
  263.     if level=="unlimited" or level>settings["reserveFuelLevel"] then
  264.         return false
  265.     else
  266.         return true
  267.     end
  268. end
  269.  
  270. function moveForward()
  271.     while turtle.detect() do
  272.         turtle.dig()
  273.         sleep(settings["digDelay"])
  274.         turtle.attack()
  275.     end
  276.     turtle.forward()
  277.     while turtle.detectUp() do
  278.         turtle.digUp()
  279.         sleep(settings["digDelay"])
  280.         turtle.attack()
  281.     end
  282. end
  283.  
  284. function topOff()
  285.     if needsFuel()==true then
  286.         setNextStep("chargeplacecharge")
  287.     else
  288.         setNextStep("placeminingwell")
  289.     end
  290. end
  291.  
  292. function placeCharge()
  293.     turtle.select(4)
  294.     while turtle.placeDown()==false do
  295.         turtle.digDown()
  296.         sleep(settings["digDelay"])
  297.         turtle.attackDown()
  298.     end
  299.     turtle.back()
  300.     turtle.select(5)
  301.     while turtle.placeDown()==false do
  302.         turtle.digDown()
  303.         sleep(settings["digDelay"])
  304.         turtle.attackDown()
  305.     end
  306.     clearSky()
  307.     turtle.up()
  308.     turtle.select(6)
  309.     while turtle.placeDown()==false do
  310.         turtle.digDown()
  311.         sleep(settings["digDelay"])
  312.         turtle.attackDown()
  313.     end
  314.     clearSky()
  315.     turtle.up()
  316.     turtle.select(7)
  317.     while turtle.placeDown()==false do
  318.         turtle.digDown()
  319.         sleep(settings["digDelay"])
  320.         turtle.attackDown()
  321.     end
  322.     clearSky()
  323.     turtle.up()
  324.     turtle.select(3)
  325.     while turtle.placeDown()==false do
  326.         turtle.digDown()
  327.         sleep(settings["digDelay"])
  328.         turtle.attackDown()
  329.     end
  330. end
  331.  
  332. function clearSky()
  333.     while turtle.detectUp() do
  334.         turtle.digUp()
  335.         turtle.up()
  336.     end
  337.     while turtle.detectDown()==false do
  338.         turtle.down()
  339.     end
  340. end
  341.  
  342. function digCharge()
  343.     clearChargeInv()
  344.     turtle.select(3)
  345.     turtle.digDown()
  346.     turtle.down()
  347.     turtle.select(7)
  348.     turtle.digDown()
  349.     turtle.down()
  350.     turtle.select(6)
  351.     turtle.digDown()
  352.     turtle.down()
  353.     turtle.select(5)
  354.     turtle.digDown()
  355.     turtle.forward()
  356.     turtle.select(4)
  357.     turtle.digDown()
  358. end
  359.  
  360. function placeChest()
  361.     turtle.select(1)
  362.     turtle.back()
  363.     while turtle.place()==false do
  364.         turtle.attack()
  365.         turtle.dig()
  366.         sleep(settings["digDelay"])
  367.     end
  368. end
  369.  
  370. function digChest()
  371.     turtle.select(1)
  372.     if turtle.getItemCount(1) > 0 then
  373.         turtle.drop()
  374.     end
  375.     turtle.dig()
  376.     turtle.forward()
  377. end
  378.  
  379. function placeMiningWell()
  380.     turtle.select(2)
  381.     while turtle.placeDown()==false do
  382.         turtle.digDown()
  383.         sleep(settings["digDelay"])
  384.         turtle.attackDown()
  385.     end
  386. end
  387.  
  388. function digMiningWell()
  389.     turtle.select(2)
  390.     if turtle.getItemCount(2) > 0 then
  391.         turtle.drop()
  392.     end
  393.     turtle.digDown()
  394. end
  395.  
  396. function setNextStep(next)
  397.     if settings["debug"]==true then
  398.         print("Set next step "..next)
  399.     end
  400.     local file=nil
  401.     while file==nil do
  402.        file=fs.open("SnapBoxStepTracker","w")
  403.     end
  404.     file.write(next)
  405.     file.close()
  406.     nextStep=next
  407. end
  408.  
  409. function getNextStep()
  410.     local file=fs.open("SnapBoxStepTracker","r")
  411.     if file==nil then
  412.         setNextStep("topoff")
  413.     else
  414.         local returnValue=file.readAll()
  415.         file.close()
  416.         setNextStep(returnValue)
  417.     end
  418. end
  419.  
  420. function powerUp()
  421.     clearPowerInv()
  422.     turtle.select(4)
  423.     turtle.digDown()
  424.     turtle.down()
  425.     turtle.select(5)
  426.     turtle.digDown()
  427.     turtle.down()
  428.     turtle.select(6)
  429.     turtle.digDown()
  430.     turtle.down()
  431.     turtle.select(7)
  432.     turtle.digDown()
  433. end
  434.  
  435. function clearChargeInv()
  436.     for i=1,7 do
  437.         if turtle.getItemCount(i)>0 then
  438.             turtle.select(i)
  439.             turtle.drop()
  440.         end
  441.     end
  442. end
  443.  
  444. function clearPowerInv()
  445.     for i=1,7 do
  446.         if turtle.getItemCount(i)>0 and i~=3 then
  447.             turtle.select(i)
  448.             turtle.drop()
  449.         end
  450.     end
  451. end
  452.  
  453. function powerDown()
  454.     turtle.select(7)
  455.     while turtle.placeDown()==false and turtle.getItemCount(7)>0 do
  456.         turtle.digDown()
  457.         sleep(settings["digDelay"])
  458.         turtle.attackDown()
  459.         sleep(0.1)
  460.     end
  461.     clearSky()
  462.     turtle.up()
  463.     turtle.select(6)
  464.     while turtle.placeDown()==false and turtle.getItemCount(6)>0 do
  465.         turtle.digDown()
  466.         sleep(settings["digDelay"])
  467.         turtle.attackDown()
  468.         sleep(0.1)
  469.     end
  470.     clearSky()
  471.     turtle.up()
  472.     turtle.select(5)
  473.     while turtle.placeDown()==false and turtle.getItemCount(5)>0 do
  474.         turtle.digDown()
  475.         sleep(settings["digDelay"])
  476.         turtle.attackDown()
  477.         sleep(0.1)
  478.     end
  479.     clearSky()
  480.     turtle.up()
  481.     turtle.select(4)
  482.     while turtle.placeDown()==false and turtle.getItemCount(4)>0 do
  483.         turtle.digDown()
  484.         sleep(settings["digDelay"])
  485.         turtle.attackDown()
  486.         sleep(0.1)
  487.     end
  488. end
  489.  
  490. function checkResume()
  491.     local file=fs.open("SnapBoxSettings","r")
  492.     if file==nil then
  493.         return false
  494.     else
  495.         file.close()
  496.         return true
  497.     end
  498. end
  499.  
  500. function doNextStep()
  501. --is there a better way to do this?
  502.     if nextStep=="topoff" then
  503.         topOff()
  504.     elseif nextStep=="chargeplacecharge" then
  505.         placeCharge()
  506.         setNextStep("chargewaitforrefuel")
  507.     elseif nextStep=="chargewaitforrefuel" then
  508.         sleep(settings["chargeTime"])
  509.         setNextStep("chargedigcharge")
  510.     elseif nextStep=="chargedigcharge" then
  511.         digCharge()
  512.         setNextStep("placeminingwell")
  513.     elseif nextStep=="placeminingwell" then
  514.         placeMiningWell()
  515.         setNextStep("placechest")
  516.     elseif nextStep=="placechest" then
  517.         placeChest()
  518.         setNextStep("powerdown")
  519.     elseif nextStep=="powerdown" then
  520.         powerDown()
  521.         setNextStep("powerup")
  522.         sleep(settings["miningTime"])
  523.     elseif nextStep=="powerup" then
  524.         powerUp()
  525.         setNextStep("digchest")
  526.     elseif nextStep=="digchest" then
  527.         digChest()
  528.         setNextStep("digminingwell")
  529.     elseif nextStep=="digminingwell" then
  530.         digMiningWell()
  531.         setNextStep("moveforward")
  532.     elseif nextStep=="moveforward" then
  533.         moveForward()
  534.         setNextStep("topoff")
  535.     else
  536.         print("Unknown Step - Something Went Wrong. Giving Up "..nextStep)
  537.         return
  538.     end
  539. end
  540.  
  541. function getNextStep()
  542.     local file=fs.open("SnapBoxStepTracker","r")
  543.     if file==nil then
  544.         setNextStep("topoff")
  545.     else
  546.         local returnValue=file.readAll()
  547.         file.close()
  548.         setNextStep(returnValue)
  549.     end
  550. end
  551.  
  552. function clearScreen()
  553.     term.clear()
  554.     term.setCursorPos(1,1)
  555. end
  556.  
  557. --------MAIN PROGRAM
  558. clearScreen()
  559.  
  560. --Check for a resume
  561. if checkResume()==false then
  562.     --check to make sure it has all the items it needs
  563.     checkStatus()
  564.  
  565.     --initial refuel
  566.     turtle.select(16)
  567.     turtle.refuel()
  568.     turtle.select(1)
  569.     nextStep="topoff"
  570.     saveSettings()
  571. else
  572.     print("Resuming")
  573.     loadSettings()
  574.     getNextStep()
  575.     cleanUp()
  576.     if settings["debug"]==true then
  577.         fs.delete("SnapBoxSettings")
  578.         fs.delete("SnapBoxStepTracker")
  579.         return
  580.     end
  581. end
  582.  
  583. --main loop
  584. while stop==false do
  585.     doNextStep()
  586.     sleep(0.2)
  587. end
Advertisement
Add Comment
Please, Sign In to add comment