WildWolve

Miningturtle-Programm: "Stripmining"

Sep 16th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --This code is developed by me (onix331) and is available under the GNU General Public License (Version 3)
  2. --For all CC-Versions Universal
  3. --See http://opensource.org/licenses/GPL-3.0
  4. --Have fun
  5.  
  6. space = 16--Defines the space of the turtle (If an update comes out and I don't update the program)
  7. ver = "2.8"--For updates
  8. status = "---"--You can modify the init-status that will be transferred to the host at the beginning
  9.  
  10. --It is usually not necessary to modify the next variables
  11.  
  12. fw = 0--Unnecessary to know:P
  13. chest = 0--If the turtle has stopped at a chest
  14. stop = 0--If the turtle has stopped at a chest
  15. shaftrun = 0--How many shafts the turtle has run
  16. senderId = 65534--Because RedNet is a bitch:D
  17. gravel = 3--Used to avoid gavel, sand, etc.
  18.  
  19. function startturtle()
  20.     function smartfuel()--Check for fuel and asks for refueling
  21.         clear()
  22.         local fuelneeded = (length * count) * 2 + count * 3 --Calculate Fuel for mining blocks
  23.         local movefuelneeded = ((length * count) * 2 + count) * 0.6  --Calculate Fuel for movement
  24.         local fuelneeded = fuelneeded + movefuelneeded
  25.         if turtle.getFuelLevel() < fuelneeded then
  26.             insert = fuelneeded - turtle.getFuelLevel()
  27.             print ("Current fuel-level is too low (", turtle.getFuelLevel(), ")")
  28.             print ("Needed:" , fuelneeded)
  29.             print ("Please insert ", insert, " fuel anywhere")
  30.             print ("When done, press ENTER")
  31.             debugfuel = turtle.getFuelLevel()
  32.             while true do
  33.                 local sEvent, param = os.pullEvent("key")
  34.                 if sEvent == "key" then
  35.                     if param == 28 then
  36.                         for i = 1, space do
  37.                             for i = 1, 64 do
  38.                                 clear()
  39.                                 if turtle.getFuelLevel() < fuelneeded then
  40.                                     shell.run("refuel")
  41.                                 else
  42.                                     turtle.select(1)
  43.                                     break
  44.                                 end
  45.                             end
  46.                             if debugfuel > turtle.getFuelLevel() then
  47.                                 turtle.select(debugi)
  48.                             else
  49.                                 debugi = i
  50.                                 turtle.select(i)
  51.                             end
  52.                         end
  53.                         turtle.select(1)
  54.                         break
  55.                     end
  56.                 end
  57.             end
  58.         if turtle.getFuelLevel() < fuelneeded then
  59.             smartfuel()
  60.         end
  61.         end
  62.     end
  63.  
  64.     function pair()
  65.         print ("Sending pairing requests")
  66.         local i = 0
  67.         rednet.broadcast("pair")
  68.         os.sleep(0.1)
  69.         rednet.broadcast("pair")
  70.         os.sleep(0.1)
  71.         rednet.broadcast("pair")
  72.         os.sleep(0.1)
  73.         rednet.broadcast("pair")
  74.         os.sleep(0.1)
  75.         rednet.broadcast("pair")
  76.         os.sleep(0.1)
  77.         rednet.broadcast("pair")
  78.         os.sleep(0.1)
  79.         senderId, message, protocol = rednet.receive()
  80.         if message=="succesfull" then
  81.             print("Succesfull paired, continuing...")
  82.             os.sleep(0.1)
  83.         end
  84.     end
  85.  
  86.     function clear()--To clear the screen
  87.         term.clear()
  88.         term.setCursorPos(1,1)
  89.     end
  90.  
  91.     function sendinitial()--Send the initial data
  92.         if enablerednet=="y" then
  93.             os.sleep(1)
  94.             rednet.send(senderId, length)
  95.             os.sleep(0.1)
  96.             rednet.send(senderId, count)
  97.             os.sleep(0.1)
  98.             rednet.send(senderId, direction)
  99.             os.sleep(0.1)
  100.         end
  101.     end
  102.  
  103.     function senddata()--To send all the data
  104.         if enablerednet=="y" then
  105.             rednet.send(senderId, lengthleft)
  106.             rednet.send(senderId, count)
  107.             rednet.send(senderId, turtle.getFuelLevel())
  108.             rednet.send(senderId, status)
  109.         end
  110.     end
  111.  
  112.     function main()--Main Program
  113.         smartfuel()
  114.         if enablerednet=="y" then
  115.             pair()
  116.             sendinitial()
  117.         end
  118.         status = "Called main"
  119.         senddata()
  120.         if called==1 then
  121.             called = 0
  122.             countn = countn - 1
  123.         end
  124.         while true do
  125.             if tonumber(count)>=1 then 
  126.                 senddata()
  127.                 fw = 1
  128.                 move()
  129.                 turnaround()
  130.                 fw = 0
  131.                 move()
  132.                 count = count - 1
  133.                 checkspace()
  134.             else
  135.                 break
  136.             end
  137.         end
  138.     end
  139.  
  140.     function returnmining()--To return to the latest shaft
  141.         status = "Return to mine..."
  142.         senddata()
  143.         chest = 0
  144.         stop = 1
  145.         if direction=="r" then
  146.             turtle.turnRight()
  147.             for i = 0, shaftrun do
  148.                 turtle.forward()
  149.                 turtle.forward()
  150.                 turtle.forward()
  151.             end
  152.             turtle.turnLeft()
  153.             main()
  154.         elseif direction=="l" then
  155.             turtle.turnLeft()
  156.             for i = 0, shaftrun do
  157.                 turtle.forward()
  158.                 turtle.forward()
  159.                 turtle.forward()
  160.             end
  161.             turtle.turnRight()
  162.             main()
  163.         end
  164.     end
  165.  
  166.     function checkl() --To check if length is valid (>0, not a String), also transforms the string into a number
  167.         length = tonumber(length)
  168.         if length==nil then
  169.             print ("Invalid number!")
  170.             length = read()
  171.             checkl()
  172.         elseif length <= 0 then
  173.             print ("Invalid number!")
  174.             length = read()
  175.             checkl()
  176.         end
  177.     end
  178.  
  179.     function checka()--To check if count is valid (>0, not a String), also transforms the string into a number
  180.         count = tonumber(count)
  181.         if count==nil then
  182.             print ("Invalid number!")
  183.             count = read()
  184.             checka()
  185.         elseif count <= 0 then
  186.             print ("Invalid number!")
  187.             count = read()
  188.             checka()
  189.         end
  190.     end
  191.  
  192.     function checkr()--To check if direction is valid ((r) or (l))
  193.         if direction=="r" then
  194.             print ("")
  195.         elseif direction=="l" then
  196.             print ("")
  197.         else
  198.             print ("Invalid input!")
  199.             direction = io.read()
  200.             checkr()
  201.         end
  202.     end
  203.  
  204.     function checkfue()--To check if fuel is valid (ok))
  205.         if fuel=="ok" then
  206.             print ("")
  207.         else
  208.             print ("Invalid input!")
  209.             fuel = io.read()
  210.             checkfue()
  211.         end
  212.     end
  213.  
  214.     function checkred()--To check if enablerednet is valid ((y) or (n))
  215.         if enablerednet=="y" then
  216.             print ("")
  217.         elseif enablerednet=="n" then
  218.             print ("")
  219.         else
  220.             print ("Invalid input!")
  221.             enablerednet = io.read()
  222.             checkred()
  223.         end
  224.     end
  225.  
  226.     function move()--Basic movement function
  227.         status = "Moving..."
  228.         for i = 1, length do
  229.             senddata()
  230.             for i = 1, gravel do
  231.                 turtle.dig()
  232.             end
  233.             turtle.forward()
  234.             if fw==1 then
  235.                 lengthleft = lengthleft - 1
  236.             end
  237.             turtle.digDown()
  238.             for i = 1, gravel do
  239.                 turtle.digUp()
  240.             end
  241.             for i = 1, gravel do
  242.                 turtle.digDown()
  243.             end
  244.         end
  245.     end
  246.  
  247.     function turnaround()--Turns the turtle at 90 degrees
  248.         status = "Turning around..."
  249.         senddata()
  250.         turtle.turnRight()
  251.         turtle.turnRight()
  252.     end
  253.  
  254.     function nextshaftr()--Next shaft (right)
  255.         status = "Going to next shaft..."
  256.         senddata()
  257.         countn = countn - 1
  258.         if countn>=2 then
  259.             shaftrun = shaftrun + 1
  260.             lengthleft = lengthleftstore
  261.             turtle.turnLeft()
  262.             turtle.dig()
  263.             turtle.digUp()
  264.             turtle.digDown()
  265.             turtle.forward()
  266.             turtle.dig()
  267.             turtle.digUp()
  268.             turtle.digDown()
  269.             turtle.forward()
  270.             senddata()
  271.             turtle.dig()
  272.             turtle.digUp()
  273.             turtle.digDown()
  274.             turtle.forward()
  275.             turtle.digUp()
  276.             turtle.digDown()
  277.             turtle.turnLeft()
  278.         end
  279.     end
  280.  
  281.     function nextshaftl()--Next shaft (left)
  282.         status = "Going to next shaft..."
  283.         senddata()
  284.         countn = countn - 1
  285.         if countn>=2 then  
  286.             shaftrun = shaftrun + 1
  287.             lengthleft = lengthleftstore
  288.             turtle.turnRight()
  289.             turtle.dig()
  290.             turtle.digUp()
  291.             turtle.digDown()
  292.             turtle.forward()
  293.             turtle.dig()
  294.             turtle.digUp()
  295.             turtle.digDown()
  296.             turtle.forward()
  297.             senddata()
  298.             turtle.dig()
  299.             turtle.digUp()
  300.             turtle.digDown()
  301.             turtle.forward()
  302.             turtle.digUp()
  303.             turtle.digDown()
  304.             turtle.turnRight()
  305.         end
  306.     end
  307.  
  308.     function returnpoint()--Return to initial point (Chest)
  309.         status = "Returning to chest..."
  310.         senddata()
  311.         if direction=="r" then
  312.             turtle.turnRight()
  313.             for i = 1, shaftrun do
  314.                 turtle.forward()
  315.                 turtle.forward()
  316.                 senddata()
  317.                 turtle.forward()
  318.             end
  319.             if stop==1 then
  320.                 turtle.forward()
  321.                 turtle.forward()
  322.                 senddata()
  323.                 turtle.forward()
  324.             end
  325.             turtle.turnLeft()
  326.             status = "Dropping things in chest..."
  327.             senddata()
  328.             for i = 1, space do
  329.                 turtle.select(i)
  330.                 turtle.drop()
  331.             end
  332.             turtle.select(1)
  333.         elseif direction=="l" then
  334.             turtle.turnLeft()
  335.             for i = 1, shaftrun do
  336.                 turtle.forward()
  337.                 turtle.forward()
  338.                 senddata()
  339.                 turtle.forward()
  340.             end
  341.             if stop==1 then
  342.                 turtle.forward()
  343.                 turtle.forward()
  344.                 senddata()
  345.                 turtle.forward()
  346.             end
  347.             turtle.turnRight()
  348.             status = "Dropping things in chest..."
  349.             senddata()
  350.             for i = 1, space do
  351.                 turtle.select(i)
  352.                 turtle.drop()
  353.             end
  354.             turtle.select(1)
  355.         end
  356.         turnaround()
  357.         if chest==1 then
  358.             returnmining()
  359.         end
  360.     end
  361.  
  362.     function checkspace()--Check for space and if necessary, return to initial point to the chest
  363.         status = "Checking space"
  364.         senddata()
  365.         local spaceleft = 0
  366.         for i = 1, space do
  367.             if turtle.getItemSpace(i) > 10 then
  368.                 spaceleft = spaceleft + 1
  369.             end
  370.         end
  371.         if spaceleft < 3 then
  372.             chest = 1
  373.             called = 1
  374.             status = "Inventory full, returning to chest"
  375.             returnpoint()
  376.         elseif direction=="r" then
  377.             nextshaftr()
  378.         else
  379.             nextshaftl()
  380.         end
  381.     end
  382.  
  383.     --Print header
  384.     clear()
  385.     print ("Strip-mining-program by onix331")
  386.     print ("Version ", ver)
  387.     os.sleep(2)
  388.  
  389.     --Start user input and define some variables
  390.     clear()
  391.     print ("Length of the single shaft(s):(Type help for help)")
  392.     length = read()
  393.     if length=="help" then
  394.         print ("How long the shafts the turtle will mine be")
  395.         length = read()
  396.         checkl()
  397.     else
  398.         checkl()
  399.     end
  400.     lengthleft = length
  401.     lengthleftstore = length
  402.  
  403.     clear()
  404.     print ("Count of the shafts:(Type help for help)")
  405.     count = read()
  406.     if count=="help" then
  407.         print ("How much shafts the turtle will mine")
  408.         count = read()
  409.         checka()
  410.     else
  411.     end
  412.     countn = count
  413.     countn = countn + 1
  414.  
  415.     clear()
  416.     print ("Direction of the shafts (Left (l), Right (r):(Type help for help)")
  417.     direction = read()
  418.     if direction=="help" then
  419.         print ("In which direction the shafts will go")
  420.         direction = read()
  421.         checkr()
  422.     else
  423.         checkr()
  424.     end
  425.  
  426.     clear()
  427.     print ("Use rednet? (Yes (y), No (n):(Type help for help)")
  428.     enablerednet = read()
  429.     if enablerednet=="help" then
  430.         print ("If RedNet and a hostcomputer should be used (See my thread at http://www.computercraft.info/forums2/index.php?/topic/19835-mining-turtle-stripmining/page__fromsearch__1")
  431.         enablerednet = read()
  432.     else
  433.         checkred()
  434.         end
  435.     if enablerednet=="y" then
  436.         rednet.open("right")--Defines the place of the modem (Usually right on the turtle)
  437.     end
  438.  
  439.     --Print user inputs
  440.     clear()
  441.     print ("Input of Length:")
  442.     print (length)
  443.     print ("Input of count")
  444.     print (count)
  445.     print ("Direction of the shafts:")
  446.     if direction=="r" then
  447.         print (direction, "ight")
  448.     else
  449.         print (direction, "eft")
  450.     end
  451.  
  452.     print ("3")
  453.     os.sleep(1)
  454.     print ("2")
  455.     os.sleep(1)
  456.     print ("1")
  457.  
  458.  
  459.     --Fire up the main program
  460.     main()
  461.  
  462.     returnpoint()
  463.  
  464.     status = "Done!"
  465.     senddata()--Sends the status "Done!" to the host
  466.     print ("Done!")
  467. end
  468.  
  469. function startcomputer()
  470. rednet.open("right")
  471. ver = "2.8"--For updates
  472. status = "---"--Because i can
  473.  
  474. function clear()--To clear the screen and set the cursor to 1,1
  475.     term.clear()
  476.     term.setCursorPos(1,1)
  477. end
  478.  
  479.     function receive()
  480.         senderId, length, protocol = rednet.receive()
  481.         storedlength = length
  482.         senderId, count, protocol = rednet.receive()
  483.         storedcount = count
  484.         senderId, direction, protocol = rednet.receive()
  485.         storeddirection = direction
  486.            
  487.         while true do
  488.             clear()
  489.             print("Length of the shaft(s): ", storedlength)
  490.             print("Count of the shaft(s): ", storedcount)
  491.             print("Direction of the shaft(s): ", storeddirection, "ight")
  492.             print("Length of the shaft left: ", length)
  493.             print("Shafts left: ", count)
  494.             print("Fuel: ", fuel)
  495.             print("Status: ", status)  
  496.             if status=="Done!" then
  497.                 break
  498.             else
  499.                 senderId, length, protocol = rednet.receive()
  500.                 senderId, count, protocol = rednet.receive()
  501.                 senderId, fuel, protocol = rednet.receive()
  502.                 senderId, status, protocol = rednet.receive()
  503.             end
  504.         end
  505.     end
  506.  
  507.     function pair()
  508.         senderId, message, protocol = rednet.receive()
  509.         if message=="pair" then--To pair to the turtle
  510.             for i = 1, 10 do
  511.                 rednet.send(senderId, "succesfull")
  512.                 os.sleep(0.1)
  513.             end
  514.             print("Succesfull paired, continuing...")
  515.         end
  516.         clear()
  517.         receive()
  518.     end
  519.  
  520.  
  521.     clear()
  522.     print ("Strip-mining-program by onix331")
  523.     print ("Version ", ver)
  524.     print ("Place of the modem can be modified in the program, right is recommended")
  525.     print ("Trying to receive pair request")
  526.  
  527.     pair()
  528.  
  529.     print ("Done!")
  530. end
  531.  
  532. if turtle then--To find out if program is run on a turtle or computer
  533.     startturtle()
  534. else
  535.     startcomputer()
  536. end
Add Comment
Please, Sign In to add comment