Anonomit

Logger

Aug 11th, 2012
2,862
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     --Edited from BikerEleven's original code, which can be found here:
  2.     --http://bit.ly/NYbb3u
  3.     --meant to be used with two of my other scripts, found below:
  4.     --http://pastebin.com/fe99rTPB
  5.     --http://pastebin.com/54wJt5fV
  6.     --fixed typo 'startLoging' to 'startLogging'
  7.     --allows for more rednet control by broadcasting messages.
  8.     --turtles now compare instead of detect during harvestTree()
  9.     --turtles will not attempt to plant saplings if they run out
  10.     --turtles are slightly more efficient
  11.     --turtles are smarter
  12.     --turtles work correctly with spruce and jungle trees
  13.     --turtles now have an option to wait until saplings are full between cycles
  14.    
  15.     local broadcast = true
  16.     local shouldOutput = false
  17.     local width = 0
  18.     local length = 0
  19.     local itemsB = {}
  20.     local itemsA = {}
  21.      
  22.     local function loadSettings()
  23.      
  24.             file = io.open( "loggerSettings", "r" )
  25.             while true do
  26.                     line = file:read()
  27.                     if line == nil then break end
  28.                    
  29.                     if line == "true" then
  30.                             shouldOutput = true
  31.                     else
  32.                             shouldOutput = false
  33.                     end
  34.                    
  35.                     line = file:read()
  36.                     if line == "true" then
  37.                             shouldWait = true
  38.                     else
  39.                             shouldWait = false
  40.                     end
  41.                    
  42.                     line = file:read()
  43.                     if line == nil then break end
  44.                    
  45.                     width = tonumber(line)
  46.                    
  47.                     line = file:read()
  48.                     if line == nil then break end
  49.                    
  50.                     length = tonumber(line)
  51.                    
  52.                     file:close()
  53.            
  54.                     return true
  55.             end
  56.            
  57.             file:close()
  58.            
  59.             return false
  60.      
  61.     end
  62.      
  63.     local function createSettings()
  64.      
  65.             term.clear()
  66.             term.setCursorPos( 1,1 )
  67.             print( "Set the loggerSettings." )
  68.      
  69.             write( "Output Redstone on cycle: " )
  70.             local str = string.lower( read() )
  71.             if str == "1" or str == "yes" or str == "true" then
  72.                     shouldOutput = true
  73.             else
  74.                     shouldOutput = false
  75.             end
  76.            
  77.             write( "Wait for full saplings: " )
  78.             local str = string.lower( read() )
  79.             if str == "1" or str == "yes" or str == "true" then
  80.                     shouldWait = true
  81.             else
  82.                     shouldWait = false
  83.             end
  84.      
  85.             write( "Rows: " )
  86.             width = tonumber(read())
  87.      
  88.             write( "Trees: " )
  89.             length = tonumber(read())
  90.            
  91.             file = io.open("loggerSettings", "w")
  92.             if file == nil then
  93.                     --error? could be locked
  94.                     return
  95.             end
  96.            
  97.             if shouldOutput then
  98.                     file:write( "true" )
  99.                     file:write( "\n" )
  100.             else
  101.                     file:write( "false" )
  102.                     file:write( "\n" )
  103.             end
  104.            
  105.             if shouldWait then
  106.                     file:write( "true" )
  107.                     file:write( "\n" )
  108.             else
  109.                     file:write( "false" )
  110.                     file:write( "\n" )
  111.             end
  112.            
  113.             file:write( width )
  114.             file:write( "\n" )
  115.             file:write( length )
  116.             file:write( "\n" )
  117.            
  118.             file:close()
  119.            
  120.             term.clear()
  121.             term.setCursorPos( 1,1 )
  122.             print( "Ready to cycle" )
  123.      
  124.      
  125.     end
  126.      
  127.     term.clear()
  128.     term.setCursorPos( 1,1 )
  129.     print( "Logger program starting..." )
  130.      
  131.     if fs.exists( "loggerSettings" ) then
  132.             if not loadSettings() then
  133.                     createSettings()
  134.             end
  135.            
  136.             term.clear()
  137.             term.setCursorPos( 1,1 )
  138.             print( "Ready to cycle" )
  139.      
  140.     else
  141.             createSettings()
  142.     end
  143.      
  144.     rednet.open( "right" )
  145.      
  146.     local function tryMove( direction )
  147.    
  148.             for i = 3, 9 do
  149.                     itemsB[i] = turtle.getItemCount(i)
  150.             end
  151.            
  152.             if direction == "down" then
  153.                     if turtle.detectDown() then
  154.                             turtle.digDown()
  155.                     end
  156.                     while not turtle.down() do
  157.                             turtle.digDown()
  158.                             sleep(1)
  159.                     end
  160.             end
  161.            
  162.             if direction == "forward" then
  163.                     if turtle.detect() then
  164.                             turtle.dig()
  165.                     end
  166.                     while not turtle.forward() do
  167.                             turtle.dig()
  168.                             sleep(1)
  169.                     end
  170.             end
  171.            
  172.             if direction == "up" then
  173.                     if turtle.detectUp() then
  174.                             turtle.digUp()
  175.                     end
  176.                     while not turtle.up() do
  177.                             turtle.digUp()
  178.                             sleep(1)
  179.                     end
  180.             end
  181.            
  182.             if direction == "up" then
  183.             else
  184.                    
  185.                     for i = 3, 9 do
  186.                             itemsA[i] = turtle.getItemCount(i)
  187.                             if itemsA[i] ~= itemsB[i] then
  188.                                     turtle.select(i)
  189.                                     turtle.drop()
  190.                             end --if itemsA ~= itemsB
  191.                     end
  192.             end
  193.     end
  194.      
  195.     local function plantTree()
  196.            
  197.             turtle.select(1)
  198.             if turtle.getItemCount(1) == 0 and outOfSaplings == 0 then
  199.                     outOfSaplings = 1
  200.                     if broadcast then
  201.                             rednet.broadcast( "noLogging" )
  202.                     end --if broadcast
  203.             end
  204.             l = turtle.getItemCount(1)
  205.             if outOfSaplings == 0 then
  206.                     turtle.placeDown()
  207.             end
  208.             t = turtle.getItemCount(1)
  209.            
  210.             if t == l and outOfSaplings == 0 then --must have not been able to place a sapling
  211.                     turtle.select(2)
  212.                     tryMove("down")
  213.                     turtle.select(2)
  214.                     if not turtle.compareDown() then
  215.                             turtle.digDown()
  216.                             turtle.placeDown()
  217.                     end
  218.                     turtle.select(3)
  219.                     tryMove("up")
  220.                     turtle.select(1)
  221.                     turtle.placeDown()
  222.             end
  223.            
  224.             if turtle.getItemCount(1) == 0 then
  225.                     outOfSaplings = 1
  226.                     if broadcast then
  227.                             rednet.broadcast( "noLogging" )
  228.                     end --if broadcast
  229.             end
  230.      
  231.             turtle.select(3)
  232.     end
  233.      
  234.     local function harvestTree()
  235.            
  236.             steps = 2
  237.             turtle.select(3)
  238.             if turtle.detect() then
  239.                             turtle.dig()
  240.                     end
  241.                     while not turtle.forward() do
  242.                             turtle.dig()
  243.                             sleep(1)
  244.                     end
  245.             turtle.select(3)
  246.             tryMove( "up" )
  247.            
  248.             while turtle.compareUp() do
  249.                     tryMove( "up" )
  250.                     steps = steps + 1
  251.                     if steps == 10 then
  252.                             break
  253.                     end
  254.             end
  255.             turtle.select(1)
  256.             while steps > 2 do
  257.                     turtle.select(1)
  258.                     tryMove( "down" )
  259.                     turtle.select(1)
  260.                     steps = steps - 1
  261.             end
  262.             if outOfSaplings == 0 then
  263.                     plantTree()
  264.             end
  265.      
  266.     end
  267.      
  268.     local function checkTree()
  269.            
  270.             turtle.select(1)
  271.             if turtle.detect() then
  272.                     tryMove( "down" )
  273.                     harvestTree()
  274.             else
  275.                     tryMove( "forward" )
  276.                     turtle.select(1)
  277.                     if not turtle.detectDown() then
  278.                             if outOfSaplings == 0 then
  279.                                     plantTree()
  280.                             end
  281.                     end
  282.             end
  283.     end
  284.      
  285.     local function harvest()
  286.            
  287.             if shouldWait then
  288.                     for i = 3, 9 do
  289.                             if turtle.getItemCount( i ) ~= 0 then
  290.                                     turtle.select( i )
  291.                                     turtle.drop()
  292.                                     sleep(0.5)
  293.                             end
  294.                     end
  295.             end
  296.            
  297.             if turtle.getItemCount(1) <= ( length * width ) then
  298.                     if broadcast then
  299.                             rednet.broadcast( "helpLogging" )
  300.                     end --if broadcast
  301.             end
  302.            
  303.             turtle.select(1)
  304.             outOfSaplings = 0
  305.             if turtle.getItemCount(1) == 0 then
  306.                     outOfSaplings = 1
  307.                     if broadcast then
  308.                             rednet.broadcast( "noLogging" )
  309.                     end --if broadcast
  310.             end
  311.             tryMove( "up" )
  312.             turtle.select(1)
  313.             tryMove( "forward" )
  314.             turtle.select(1)
  315.             checkTree()
  316.            
  317.             bump = false
  318.            
  319.             for w=1, width do
  320.            
  321.                     for l=1, length do
  322.                    
  323.                             if l~=length then
  324.                                     turtle.select(1)
  325.                                     tryMove( "forward" )
  326.                                     turtle.select(1)
  327.                                     tryMove( "forward" )
  328.                                     turtle.select(1)
  329.                                     checkTree()
  330.                             end
  331.                    
  332.                     end
  333.            
  334.                     if w~=width then
  335.                             if not bump then
  336.                                     turtle.turnLeft()
  337.                                     turtle.select(1)
  338.                                     tryMove( "forward" )
  339.                                     turtle.select(1)
  340.                                     tryMove( "forward" )
  341.                                     turtle.select(1)
  342.                             else
  343.                                     turtle.turnRight()
  344.                                     turtle.select(1)
  345.                                     tryMove( "forward" )
  346.                                     turtle.select(1)
  347.                                     tryMove( "forward" )
  348.                                     turtle.select(1)
  349.                             end
  350.                             checkTree()
  351.                            
  352.                             if bump then
  353.                                     turtle.turnRight()
  354.                             else
  355.                                     turtle.turnLeft()
  356.                             end
  357.                            
  358.                             bump = not bump
  359.                     end
  360.                    
  361.             end
  362.            
  363.            
  364.             --Return
  365.             if not bump then
  366.                     turtle.turnLeft()
  367.                     turtle.select(1)
  368.                     tryMove( "forward" )
  369.                     turtle.select(1)
  370.                     turtle.turnLeft()
  371.                     for i = 1, length do
  372.                             turtle.select(1)
  373.                             tryMove( "forward" )
  374.                             turtle.select(1)
  375.                             tryMove( "forward" )
  376.                             turtle.select(1)
  377.                             if i~=length then
  378.                                     turtle.select(1)
  379.                                     tryMove( "forward" )
  380.                                     turtle.select(1)
  381.                             end
  382.                     end
  383.             else
  384.                     turtle.select(1)
  385.                     tryMove( "forward" )
  386.                     turtle.select(1)
  387.                     tryMove( "forward" )
  388.                     turtle.select(1)
  389.             end
  390.             turtle.turnLeft()
  391.            
  392.             if width == 1 then
  393.                     turtle.select(1)
  394.                     tryMove( "forward" )
  395.             else
  396.                     for i=1, width - 1 do
  397.                             turtle.select(1)
  398.                             tryMove( "forward" )
  399.                             turtle.select(1)
  400.                             tryMove( "forward" )
  401.                             turtle.select(1)
  402.                             tryMove( "forward" )
  403.                             turtle.select(1)
  404.                     end
  405.                     if not bump then
  406.                             turtle.select(1)
  407.                             tryMove( "forward" )
  408.                             turtle.select(1)
  409.                     end
  410.             end
  411.            
  412.             turtle.turnLeft()
  413.             tryMove( "down" )
  414.             turtle.select(9)
  415.            
  416.            
  417.             --Drop off and resupply
  418.             if shouldOutput then
  419.                     redstone.setOutput("right", true)
  420.                     redstone.setOutput("left", true)
  421.                     redstone.setOutput("bottom", true)
  422.                     output = true
  423.                     if shouldWait then
  424.                             wait = true
  425.                     else
  426.                             wait = false
  427.                     end
  428.                    
  429.                     s3 = false
  430.                     s4 = false
  431.                     s5 = false
  432.                     s6 = false
  433.                     s7 = false
  434.                     s8 = false
  435.                     s9 = false
  436.                    
  437.                     while output do
  438.                            
  439.                             for i=3, 9 do
  440.                                     if wait and turtle.getItemSpace( 1 ) == 0 then
  441.                                             redstone.setOutput("right", false)
  442.                                             redstone.setOutput("left", false)
  443.                                             redstone.setOutput("bottom", false)
  444.                                             wait = false
  445.                                     end
  446.                                    
  447.                                     if turtle.getItemSpace( 3 ) == 64 then
  448.                                             s3 = true
  449.                                     end
  450.                                    
  451.                                     if turtle.getItemSpace( 4 ) == 64 then
  452.                                             s4 = true
  453.                                     end
  454.                                    
  455.                                     if turtle.getItemSpace( 5 ) == 64 then
  456.                                             s5 = true
  457.                                     end
  458.                                    
  459.                                     if turtle.getItemSpace( 6 ) == 64 then
  460.                                             s6 = true
  461.                                     end
  462.                                    
  463.                                     if turtle.getItemSpace( 7 ) == 64 then
  464.                                             s7 = true
  465.                                     end
  466.                                    
  467.                                     if turtle.getItemSpace( 8 ) == 64 then
  468.                                             s8 = true
  469.                                     end
  470.                                    
  471.                                     if turtle.getItemSpace( 9 ) == 64 then
  472.                                             s9 = true
  473.                                     end
  474.                                    
  475.                                     if turtle.getItemSpace( i ) ~= 64 then
  476.                                             break
  477.                                     elseif i==9 and turtle.getItemSpace( 9 ) == 64 and not wait then
  478.                                             output = false
  479.                                     end
  480.                             end
  481.                             sleep(0.5)
  482.                            
  483.                             if shouldWait then
  484.                                    
  485.                                     if s3 and turtle.getItemSpace( 3 ) ~= 64 then
  486.                                             turtle.select( 3 )
  487.                                             turtle.drop()
  488.                                     end
  489.                                    
  490.                                     if s4 and turtle.getItemSpace( 4 ) ~= 64 then
  491.                                             turtle.select( 4 )
  492.                                             turtle.drop()
  493.                                     end
  494.                                    
  495.                                     if s5 and turtle.getItemSpace( 5 ) ~= 64 then
  496.                                             turtle.select( 5 )
  497.                                             turtle.drop()
  498.                                     end
  499.                                    
  500.                                     if s6 and turtle.getItemSpace( 6 ) ~= 64 then
  501.                                             turtle.select( 6 )
  502.                                             turtle.drop()
  503.                                     end
  504.                                    
  505.                                     if s7 and turtle.getItemSpace( 7 ) ~= 64 then
  506.                                             turtle.select( 7 )
  507.                                             turtle.drop()
  508.                                     end
  509.                                    
  510.                                     if s8 and turtle.getItemSpace( 8 ) ~= 64 then
  511.                                             turtle.select( 8 )
  512.                                             turtle.drop()
  513.                                     end
  514.                                    
  515.                                     if s9 and turtle.getItemSpace( 9 ) ~= 64 then
  516.                                             turtle.select( 9 )
  517.                                             turtle.drop()
  518.                                     end
  519.                                    
  520.                         end
  521.                        
  522.                     end
  523.                    
  524.             end
  525.            
  526.             if broadcast then
  527.                     rednet.broadcast("doneLogging")
  528.             end --if broadcast
  529.            
  530.             term.clear()
  531.             term.setCursorPos( 1,1 )
  532.             print( "Ready to cycle" )
  533.                    
  534.     end
  535.      
  536.     while true do
  537.             event, p1, p2 = os.pullEvent()
  538.            
  539.             if event == "rednet_message" and p2 == "startLogging" and broadcast then
  540.                     print( "Rednet message received, harvest tarting." )
  541.                     sleep( 1 )
  542.                     shell.run( "clear" )
  543.                     print( "Logger" )
  544.                     harvest()
  545.             end
  546.            
  547.             if event == "char" and p1 == "s" then
  548.                     createSettings()
  549.             end
  550.            
  551.             if event == "char" and p1 == "r" then
  552.                     print("User override, harvest starting.")
  553.                     if broadcast then
  554.                             rednet.broadcast( "startLogging" )
  555.                     end --if broadcast
  556.                     harvest()
  557.             end
  558.            
  559.             if event == "redstone" then
  560.                     print("Redstone current received, harvest starting.")
  561.                     sleep( 1 )
  562.                     shell.run( "clear" )
  563.                     print( "Logger" )
  564.                     if broadcast then
  565.                             rednet.broadcast( "startLogging" )
  566.                     end --if broadcast
  567.                     harvest()
  568.             end
  569.     end
RAW Paste Data