Advertisement
Birog

Logger

Feb 22nd, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 54.74 KB | None | 0 0
  1.     --Logger V1.0 program made by Anonomit
  2.      
  3.      
  4.     local bNoBroadcast = false --set to true to suppress option to use broadcast console
  5.     local bUseFuel = true --whether turtles consume fuel
  6.     local bDebugDefault = false
  7.      
  8.     local tArgs = { ... }
  9.     local bDebug = tArgs[1] == "debug" and true or ( tArgs[1] == "noDebug" and false or bDebugDefault )
  10.     local nLoggerSettingsLines = 9
  11.     local foo
  12.     local bar
  13.     local baz
  14.     local nTreesremaining
  15.     local sHarvestMode
  16.     local bUseBroadcast
  17.     local nRows
  18.     local nTrees
  19.     local bEmptyLogs
  20.     local bRefillSaplings
  21.     local bOutput
  22.     local tSides = {}
  23.     local bLowSaplings
  24.     local bNoSaplings
  25.     local bKeyLog
  26.     tPeripheralType = {}
  27.      
  28.     local xTerm, yTerm = term.getSize()
  29.      
  30.     term.clear()
  31.      
  32.      
  33.     local function getPeripherals()
  34.             for _, side in pairs( rs.getSides() ) do
  35.                     if peripheral.isPresent( side ) then
  36.                             tPeripheralType[side] = peripheral.getType( side )
  37.                     end --if peripheral.isPresent( side )
  38.             end --for _, side in pairs( rs.getSides() )
  39.     end --local function getPeripherals()
  40.      
  41.     getPeripherals()
  42.      
  43.     local function round( _number, _dp)
  44.             local nMultiple = 10^( _dp or 0 )
  45.             return math.floor( _number * nMultiple + 0.5 ) / nMultiple
  46.     end --local function round( _number, _dp )
  47.      
  48.      
  49.      
  50.     function clearAll( _xPos, _yPos, _text, ... )
  51.             local xDefault = 1
  52.             local yDefault = 3
  53.            
  54.             foo = false
  55.            
  56.             if not arg[1] then
  57.                     term.clear()
  58.             else --arg[1]
  59.                     for i = 1, yTerm do
  60.                             for _, value in ipairs( arg ) do
  61.                                     if i == value then
  62.                                             foo = true
  63.                                     end --if i == value
  64.                             end --for _, value in ipairs( arg )
  65.                             if not foo then
  66.                                     term.setCursorPos( 1, i )
  67.                                     term.clearLine()
  68.                             end --if not foo
  69.                             foo = false
  70.                     end --for i = 1, yTerm
  71.             end --if not arg[1]
  72.            
  73.             foo = nil
  74.            
  75.             term.setCursorPos( 1, 1 )
  76.             if _text then
  77.                     write( _text )
  78.             else --_text
  79.                     write( "Anonomit Tree Farmer #" .. os.computerID() )
  80.             end --if _text
  81.             term.setCursorPos( 1, 2 )
  82.             for i = 1, xTerm - 1 do
  83.                     write( "~" )
  84.             end --for i = 1, xTerm - 1
  85.            
  86.             if type( tonumber( _xPos ) ) == "number" and type( tonumber( _yPos ) ) == "number" then
  87.                     if _xPos <= xTerm and _xPos > 0 and _yPos <= yTerm and _yPos > 0 then
  88.                             term.setCursorPos( _xPos, _yPos )
  89.                     else --_xPos <= xTerm and _xPos > 0 and _yPos <= yTerm and _yPos > 0
  90.                             term.setCursorPos( xDefault, yDefault )
  91.                     end --if _xPos <= xTerm and _xPos > 0 and _yPos <= yTerm and _yPos > 0
  92.             else --type( tonumber( _xPos ) ) == "number" and type( tonumber( _yPos ) ) == "number"
  93.                     term.setCursorPos( xDefault, yDefault )
  94.             end --if _xPos == nil or _yPos == nil
  95.            
  96.     end --function clearAll( _xPos, _yPos, _text )
  97.      
  98.      
  99.      
  100.     local function header( _text )
  101.             local xCursorPos, yCursorPos = term.getCursorPos()
  102.             term.setCursorPos( 1, 1 )
  103.             term.clearLine()
  104.             if _text then
  105.                     print( _text )
  106.             else --_text
  107.                     print( "Anonomit Tree Farmer #" .. os.computerID() )
  108.             end --if _text
  109.             term.clearLine()
  110.             for i = 1, xTerm - 1 do
  111.                     write( "~" )
  112.             end --for i = 1, xTerm - 1
  113.             term.setCursorPos( xCursorPos, yCursorPos )
  114.     end --local function header( _text )
  115.      
  116.      
  117.      
  118.     local function rednetSend( _message )
  119.            
  120.             if bUseBroadcast then
  121.                     rednet.send( nBroadcastID, _message )
  122.             end --if bUseBroadcast
  123.            
  124.     end --local function rednetSend( _message )
  125.      
  126.      
  127.      
  128.     local function keyLog()
  129.            
  130.             bKeyLog = false
  131.            
  132.             while true do
  133.                    
  134.                     event, key = os.pullEvent( "char" )
  135.                     if key ~= 1 then
  136.                             print( "Stopping..." )
  137.                             bKeyLog = true
  138.                             break --while true
  139.                     end --if key ~= 1
  140.                    
  141.             end --while true
  142.            
  143.             while true do
  144.                    
  145.                     sleep( 0.01 )
  146.                    
  147.             end --while true
  148.            
  149.     end --local function keyLog()
  150.      
  151.      
  152.      
  153.     local function select( _selectSlot )
  154.            
  155.             if tonumber( _selectSlot ) == nil then
  156.                     for i = 3, 15 do
  157.                             if turtle.getItemSpace( i ) > 0 then
  158.                                     select( i )
  159.                                     return i
  160.                             end --if turtle.getItemSpace( i ) > 0
  161.                     end --for i = 3, 15
  162.             else --tonumber( _selectSlot ) == nil
  163.                     turtle.select( tonumber( _selectSlot ) )
  164.                     return _selectSlot
  165.             end --if tonumber( _selectSlot ) == nil
  166.            
  167.             return 3
  168.            
  169.     end --local function select( _selectSlot )
  170.      
  171.      
  172.      
  173.     local function dig( _digDirection )
  174.            
  175.             if _digDirection == nil then
  176.                     _digDirection = "forward"
  177.             elseif _digDirection == "right" or _digDirection == "r" then
  178.                     move( "right" )
  179.                     _digDirection = "forward"
  180.             elseif _digDirection == "left" or _digDirection == "l" then
  181.                     move( "left" )
  182.                     _digDirection = "forward"
  183.             elseif _digDirection == "back" or _digDirection == "b" then
  184.                     move( "right" )
  185.                     move( "right" )
  186.                     _digDirection = "forward"
  187.             end
  188.            
  189.             if _digDirection == "forward" or _digDirection == "f" and turtle.detect() then
  190.                     turtle.dig()
  191.             elseif _digDirection == "up" or _digDirection == "u" and turtle.detectUp() then
  192.                     turtle.digUp()
  193.             elseif _digDirection == "down" or _digDirection == "d" and turtle.detectDown() then
  194.                     turtle.digDown()
  195.             end --if _digDirection == "forward" or _digDirection == "f" and turtle.detect()
  196.            
  197.     end --local function dig( _digDirection )
  198.      
  199.      
  200.      
  201.     local function move( _moveDirection, _moveDistance, _moveSlot )
  202.            
  203.             local hasSpun = false
  204.            
  205.             if type( tonumber( _moveDirection ) ) == "number" and _moveDistance == nil then
  206.                     _moveDirection = "forward"
  207.                     _moveDistance = _moveDirection
  208.             elseif type( tonumber( _moveDirection ) ) == "number" and type( tonumber( _moveDistance ) ) == "nil" then
  209.                     _moveDirection = _moveDistance
  210.                     _moveDistance = _moveDirection
  211.             end --if type( tonumber( _moveDirection ) ) == "number" and _moveDistance == nil
  212.            
  213.             local function selection()
  214.                     if tonumber( _moveSlot ) then
  215.                             if tonumber( _moveSlot ) > 2 then
  216.                                     select()
  217.                             else --tonumber( _moveSlot ) > 2
  218.                                     select( _moveSlot )
  219.                             end --if tonumber( _moveSlot ) > 2
  220.                     else --tonumber( _moveSlot )
  221.                             _moveSlot = select()
  222.                     end --if tonumber( _moveSlot )
  223.             end --local function selection()
  224.            
  225.             local function checkFuel()
  226.                     if bUseFuel then
  227.                             if turtle.getFuelLevel() == 0 then
  228.                                     if turtle.getItemSpace( 16 ) ~= 64 then
  229.                                             select( 16 )
  230.                                     else --turtle.getItemSpace( 16 ) ~= 64
  231.                                             for i = 3, 15 do
  232.                                                     if turtle.getItemSpace( i ) ~= 64 then
  233.                                                             turtle.select( i )
  234.                                                             break --for i = 3, 15
  235.                                                     end --if turtle.getItemSpace( i ) ~= 64
  236.                                             end --for i = 3, 15
  237.                                     end --if turtle.getItemSpace( 16 ) ~= 64
  238.                                     turtle.refuel( 1 )
  239.                             end --if turtle.getFuelLevel() == 0
  240.                             selection()
  241.                     end --if bUseFuel
  242.             end --local function checkFuel()
  243.            
  244.             if _moveDirection == "right" or _moveDirection == "r" then
  245.                     turtle.turnRight()
  246.                     _moveDirection = "forward"
  247.             elseif _moveDirection == "left" or _moveDirection == "l" then
  248.                     turtle.turnLeft()
  249.                     _moveDirection = "forward"
  250.             end --if _moveDirection == "right" or _moveDirection == "r"
  251.            
  252.             local function movement()
  253.                    
  254.                     if _moveDirection == "forward" or _moveDirection == "f" then
  255.                             if turtle.forward() then
  256.                                     return true
  257.                             else --turtle.forward()
  258.                                     return false
  259.                             end --if turtle.forward()
  260.                     elseif _moveDirection == "up" or _moveDirection == "u" then
  261.                             if turtle.up() then
  262.                                     return true
  263.                             else --turtle.up()
  264.                                     return false
  265.                             end --if turtle.up()
  266.                     elseif _moveDirection == "down" or _moveDirection == "d" then
  267.                             if turtle.down() then
  268.                                     return true
  269.                             else --turtle.down()
  270.                                     return false
  271.                             end --if turtle.down()
  272.                     elseif _moveDirection == "back" or _moveDirection == "b" then
  273.                             if hasSpun then
  274.                                     if turtle.forward() then
  275.                                             return true
  276.                                     else --turtle.forward()
  277.                                             return false
  278.                                     end --if turtle.forward()
  279.                             else --hasSpun
  280.                                     if turtle.back() then
  281.                                             return true
  282.                                     else --turtle.back()
  283.                                             return false
  284.                                     end --if turtle.back()
  285.                             end --if hasSpun
  286.                     end --if _moveDirection == "forward" or _moveDirection == "f"
  287.                    
  288.             end --local function movement()
  289.            
  290.             local function digger()
  291.            
  292.                     if _moveDirection == "forward" or _moveDirection == "f" then
  293.                             dig( "forward" )
  294.                     elseif _moveDirection == "up" or _moveDirection == "u" then
  295.                             dig( "up" )
  296.                     elseif _moveDirection == "down" or _moveDirection == "d" then
  297.                             dig( "down" )
  298.                     elseif _moveDirection == "back" or _moveDirection == "b" then
  299.                             if hasSpun then
  300.                                     dig( "forward" )
  301.                             else --hasSpun then
  302.                                     turtle.turnRight()
  303.                                     turtle.turnRight()
  304.                                     dig( "forward" )
  305.                             end --if hasSpun
  306.                     end --if _moveDirection == "forward" or _moveDirection == "f"
  307.                    
  308.             end --local function digger()
  309.            
  310.             local slotCount = {}
  311.             local function vacuum()
  312.                     for i = 1, 16 do
  313.                             slotCount[i] = turtle.getItemSpace( i )
  314.                     end --for i = 3, 16
  315.                     turtle.suckDown()
  316.                     for i = 3, 15 do
  317.                             if turtle.getItemSpace( i ) < slotCount[i] and slotCount[i] == 64 then
  318.                                     turtle.select( i )
  319.                                     turtle.dropUp()
  320.                             end --if turtle.getItemSpace[i] < slotCount[i]
  321.                     end --for i = 3, 15
  322.                    
  323.                     selection()
  324.                    
  325.             end --local function vacuum()
  326.            
  327.             if _moveDistance ~= nil and _moveDistance ~= 0 then
  328.                     for i = 1, _moveDistance do
  329.                             if not turtle.detectDown() then
  330.                                     --vacuum()
  331.                             end --if not turtle.detectDown()
  332.                             selection()
  333.                             while not movement() do
  334.                                     checkFuel()
  335.                                     digger()
  336.                             end --while not movement()
  337.                     end --for i = 1, _moveDistance
  338.                     if hasSpun then
  339.                             turtle.turnRight()
  340.                             turtle.turnRight()
  341.                     end --if hasSpun
  342.             end --if _moveDistance ~= nil and _moveDistance ~= 0
  343.            
  344.     end --local function move( _moveDirection, _moveDistance, _moveSlot )
  345.      
  346.      
  347.      
  348.     local function loadSettings()
  349.            
  350.             sHarvestMode, nRows, nTrees, bEmptyLogs, bRefillSaplings = nil, nil, nil, nil, nil
  351.             bOutput = false
  352.             tSides = {}
  353.            
  354.             if fs.exists( "loggerSettings" ) then
  355.                    
  356.                     local tLine = {}
  357.                     local file = fs.open( "loggerSettings", "r" )
  358.                    
  359.                     for i = 1, nLoggerSettingsLines do
  360.                             tLine[ #tLine + 1 ] = file.readLine()
  361.                     end --for i = 1, nLoggerSettingsLines
  362.                    
  363.                     file.close()
  364.                    
  365.                     sHarvestMode = tLine[1]
  366.                     bUseBroadcast = tLine[2] == "true" and true or ( tLine[2] == "false" and false or false )
  367.                     if bUseBroadcast then
  368.                            
  369.                             nBroadcastID = tonumber( tLine[3] ) ~= nil and tonumber( nBroadcastID ) or nil
  370.                            
  371.                     end --if bUseBroadcast
  372.                    
  373.                     if sHarvestMode == "farm" then
  374.                            
  375.                             nRows = tonumber( tLine[4] ) ~= nil and tonumber( tLine[4] ) or nil
  376.                             nTrees = tonumber( tLine[5] ) ~= nil and tonumber( tLine[5] ) or nil
  377.                             bEmptyLogs = tLine[6] == "true" and true or ( tLine[6] == "false" and false or false )
  378.                             bRefillSaplings = tLine[7] == "true" and true or ( tLine[7] == "false" and false or false )
  379.                             if bEmptyLogs or bRefillSaplings then
  380.                                     bOutput = tLine[8] == "true" and true or ( tLine[8] == "false" and false or false )
  381.                                     if bOutput then
  382.                                             tSides = textutils.unserialize( tLine[9] ) or {}
  383.                                     end --if bOutput
  384.                             end --if bEmptyLogs or bRefillSaplings
  385.                            
  386.                     end --if sHarvestMode == "farm"
  387.                    
  388.                    
  389.                    
  390.                     if sHarvestMode == "farm" and ( bUseBroadcast == true or bUseBroadcast == false ) and nRows and nTrees and ( bEmptyLogs == true or bEmptyLogs == false ) and ( bRefillSaplings == true or bRefillSaplings == false ) then
  391.                             return true
  392.                     elseif sHarvestMode == "bonemeal" then
  393.                             return true
  394.                     else --sHarvestMode == "farm" and ( bUseBroadcast == true or bUseBroadcast == false ) and nRows and nTrees and ( bEmptyLogs == true or bEmptyLogs == false ) and ( bRefillSaplings == true or bRefillSaplings == false )
  395.                             return false
  396.                     end --sHarvestMode == "farm" and ( bUseBroadcast == true or bUseBroadcast == false ) and nRows and nTrees and ( bEmptyLogs == true or bEmptyLogs == false ) and ( bRefillSaplings == true or bRefillSaplings == false )
  397.                    
  398.             elseif not fs.exists( "loggerSettings" ) then
  399.                     return false
  400.             end --if fs.exists( "loggerSettings" )
  401.            
  402.     end --local function loadSettings()
  403.      
  404.      
  405.      
  406.     local function writeToFile()
  407.            
  408.             if fs.exists( "loggerSettings" ) then
  409.                     fs.delete( "loggerSettings" )
  410.             end --if fs.exists( "loggerSettings" )
  411.             local file = fs.open( "loggerSettings", "w" )
  412.             file.writeLine( sHarvestMode )
  413.             file.writeLine( bUseBroadcast ~= nil and tostring( bUseBroadcast ) or "nil" )
  414.             file.writeLine( tostring( nBroadcastId ) ~= nil and tostring( nBroadcastID ) or "nil" )
  415.             if sHarvestMode == "farm" then
  416.                     file.writeLine( nRows ~= nil and nRows or "nil" )
  417.                     file.writeLine( nTrees ~= nil and nTrees or "nil" )
  418.                     file.writeLine( tostring( bEmptyLogs ) ~= nil and tostring( bEmptyLogs ) or "false" )
  419.                     file.writeLine( tostring( bRefillSaplings ) ~= nil and tostring( bRefillSaplings ) or "false" )
  420.                     if bEmptyLogs or bRefillSaplings then
  421.                             file.writeLine( tostring( bOutput ) ~= nil and tostring( bOutput ) or "false" )
  422.                             if bOutput then
  423.                                     file.writeLine( textutils.serialize( tSides ) ~= nil and textutils.serialize( tSides ) or "nil" )
  424.                             end --if bOutput
  425.                     end --if bEmptyLogs or bRefillSaplings
  426.             end --if sHarvestMode == "farm"
  427.             file.close()
  428.            
  429.     end --local function writeToFile()
  430.      
  431.      
  432.      
  433.     local function createSettings()
  434.            
  435.             sHarvestMode = nil
  436.             bUseBroadcast = nil
  437.             nBroadcastID = nil
  438.             nRows = nil
  439.             nTrees = nil
  440.             bEmptyLogs = nil
  441.             bRefillSaplings = nil
  442.             bOutput = nil
  443.             tSides = {}
  444.            
  445.             clearAll( 1, 3, "Settings:" )
  446.            
  447.             local xCursorPos, yCursorPos = term.getCursorPos()
  448.             while sHarvestMode == nil do
  449.                     header( "Settings:" )
  450.                     term.setCursorPos( xCursorPos, yCursorPos )
  451.                     term.clearLine()
  452.                     write( "Harvest mode (farm/bonemeal): " )
  453.                     sHarvestMode = string.lower( read() )
  454.                     if sHarvestMode ~= "farm" and sHarvestMode ~= "bonemeal" then
  455.                             term.clearLine()
  456.                             write( "Invalid Value" )
  457.                             sleep( 0.5 )
  458.                             term.clearLine()
  459.                             sHarvestMode = nil
  460.                     end --if sHarvestMode ~= "farm" and sHarvestMode ~= "bonemeal"
  461.             end --while sHarvestMode == nil
  462.            
  463.             if not bNoBroadcast and tPeripheralType[right] ~= "modem" then
  464.                    
  465.                     local xCursorPos, yCursorPos = term.getCursorPos()
  466.                     while bUseBroadcast == nil do
  467.                             header( "Settings:" )
  468.                             term.setCursorPos( xCursorPos, yCursorPos )
  469.                             term.clearLine()
  470.                             write( "Use Broadcast Console: " )
  471.                             bUseBroadcast = read()
  472.                             if bUseBroadcast == "true" or bUseBroadcast == "yes" or bUseBroadcast == "1" then
  473.                                     bUseBroadcast = true
  474.                             elseif bUseBroadcast == "false" or bUseBroadcast == "no" or bUseBroadcast == "0" then
  475.                                     bUseBroadcast = false
  476.                             else --if bUseBroadcast == "true" or bUseBroadcast == "yes" or bUseBroadcast == "1"
  477.                                     term.clearLine()
  478.                                     write( "Invalid Value" )
  479.                                     sleep( 0.5 )
  480.                                     term.clearLine()
  481.                                     bUseBroadcast = nil
  482.                             end --if bUseBroadcast == "true" or bUseBroadcast == "yes" or bUseBroadcast == "1"
  483.                     end --while bUseBroadcast == nil
  484.                    
  485.                    
  486.                     if bUseBroadcast then
  487.                            
  488.                             for _, side in pairs( rs.getSides() ) do
  489.                                     rednet.open( side )
  490.                             end --for _, side in pairs( rs.getSides() )
  491.                            
  492.                             local xCursorPos, yCursorPos = term.getCursorPos()
  493.                             while nBroadcastID == nil do
  494.                                     header( "Settings:" )
  495.                                     rednet.broadcast( "broadcastPing" )
  496.                                     local param1, param2, param3 = rednet.receive( 0.1 )
  497.                                     if param2 == "broadcastPong" then
  498.                                             term.setCursorPos( xCursorPos, yCursorPos + 1 )
  499.                                             term.clearLine()
  500.                                             write( ">Broadcast Console #" .. param1 .. " is " .. round( param3, 0 ) .. " Away" )
  501.                                     else --param2 == "loggerPong"
  502.                                             write( ">No Broadcast Consoles Found Nearby" )
  503.                                     end --if param2 == "loggerPong"
  504.                                     term.setCursorPos( xCursorPos, yCursorPos )
  505.                                     term.clearLine()
  506.                                     write( "Broadcast Console ID: " )
  507.                                     nBroadcastID = tonumber( read() )
  508.                                     if nBroadcastID == nil then
  509.                                             term.clearLine()
  510.                                             write( "Invalid Value" )
  511.                                             sleep( 0.5 )
  512.                                             term.clearLine()
  513.                                     elseif nBroadcastID < 0 then
  514.                                             term.clearLine()
  515.                                             write( "Invalid Value" )
  516.                                             sleep( 0.5 )
  517.                                             term.clearLine()
  518.                                             nBroadcastID = nil
  519.                                     else --nBroadcastID == nil
  520.                                             rednetSend( "loggerPing" )
  521.                                             local id, msg, dist = rednet.receive( 0.1 )
  522.                                             if msg == "loggerPong" then
  523.                                                     break --while nBroadcastID == nil
  524.                                             else --msg == "loggerPong"
  525.                                             term.clearLine()
  526.                                             write( "No Response" )
  527.                                             sleep( 1 )
  528.                                             term.clearLine()
  529.                                             nBroadcastID = nil
  530.                                             end --if msg == "broadcastPong"
  531.                                     end --if nBroadcastID == nil
  532.                             end --while nBroadcastID == nil
  533.                            
  534.                     end --if bUseBroadcast
  535.                    
  536.             else --not bNoBroadcast and tPeripheralType[right] ~= "modem"
  537.                    
  538.                     bUseBroadcast = false
  539.                    
  540.             end --if not bNoBroadcast and tPeripheralType[right] ~= "modem"
  541.            
  542.             if sHarvestMode == "farm" then
  543.                     local xCursorPos, yCursorPos = term.getCursorPos()
  544.                     while nRows == nil do
  545.                             header( "Settings:" )
  546.                             term.setCursorPos( xCursorPos, yCursorPos )
  547.                             term.clearLine()
  548.                             write( "Number of rows: " )
  549.                             nRows = tonumber( read() )
  550.                             if nRows == nil then
  551.                                     term.clearLine()
  552.                                     write( "Invalid Value" )
  553.                                     sleep( 0.5 )
  554.                                     term.clearLine()
  555.                             elseif nRows < 1 then
  556.                                     term.clearLine()
  557.                                     write( "Invalid Value" )
  558.                                     sleep( 0.5 )
  559.                                     term.clearLine()
  560.                                     nRows = nil
  561.                             end --if nRows == nil
  562.                     end --while nRows == nil
  563.                    
  564.                     local xCursorPos, yCursorPos = term.getCursorPos()
  565.                     while nTrees == nil do
  566.                             header( "Settings:" )
  567.                             term.setCursorPos( xCursorPos, yCursorPos )
  568.                             term.clearLine()
  569.                             write( "Trees per row: " )
  570.                             nTrees = tonumber( read() )
  571.                             if nTrees == nil then
  572.                                     term.clearLine()
  573.                                     write( "Invalid Value" )
  574.                                     sleep( 0.5 )
  575.                                     term.clearLine()
  576.                             elseif nTrees < 1 then
  577.                                     term.clearLine()
  578.                                     write( "Invalid Value" )
  579.                                     sleep( 0.5 )
  580.                                     term.clearLine()
  581.                                     nTrees = nil
  582.                             end --if nTrees == nil
  583.                     end --while nTrees == nil
  584.                    
  585.                     local xCursorPos, yCursorPos = term.getCursorPos()
  586.                     while bEmptyLogs == nil do
  587.                             header( "Settings:" )
  588.                             term.setCursorPos( xCursorPos, yCursorPos )
  589.                             term.clearLine()
  590.                             write( "Wait for emptied logs: " )
  591.                             bEmptyLogs = read()
  592.                             if bEmptyLogs == "true" or bEmptyLogs == "yes" or bEmptyLogs == "1" then
  593.                                     bEmptyLogs = true
  594.                             elseif bEmptyLogs == "false" or bEmptyLogs == "no" or bEmptyLogs == "0" then
  595.                                     bEmptyLogs = false
  596.                             else --if bEmptyLogs == "true" or bEmptyLogs == "yes" or bEmptyLogs == "1"
  597.                                     term.clearLine()
  598.                                     write( "Invalid Value" )
  599.                                     sleep( 0.5 )
  600.                                     term.clearLine()
  601.                                     bEmptyLogs = nil
  602.                             end --if bEmptyLogs == "true" or bEmptyLogs == "yes" or bEmptyLogs == "1"
  603.                     end --while bEmptyLogs == nil
  604.                    
  605.                     local xCursorPos, yCursorPos = term.getCursorPos()
  606.                     while bRefillSaplings == nil do
  607.                             header( "Settings:" )
  608.                             term.setCursorPos( xCursorPos, yCursorPos )
  609.                             term.clearLine()
  610.                             write( "Wait for full saplings: " )
  611.                             bRefillSaplings = read()
  612.                             if bRefillSaplings == "true" or bRefillSaplings == "yes" or bRefillSaplings == "1" then
  613.                                     bRefillSaplings = true
  614.                             elseif bRefillSaplings == "false" or bRefillSaplings == "no" or bRefillSaplings == "0" then
  615.                                     bRefillSaplings = false
  616.                             else --if bRefillSaplings == "true" or bRefillSaplings == "yes" or bRefillSaplings == "1"
  617.                                     term.clearLine()
  618.                                     write( "Invalid Value" )
  619.                                     sleep( 0.5 )
  620.                                     term.clearLine()
  621.                                     bRefillSaplings = nil
  622.                             end --if bRefillSaplings == "true" or bRefillSaplings == "yes" or bRefillSaplings == "1"
  623.                     end --while bRefillSaplings == nil
  624.                    
  625.                     if bEmptyLogs or bRefillSaplings then
  626.                             local xCursorPos, yCursorPos = term.getCursorPos()
  627.                             while bOutput == nil do
  628.                                     header( "Settings:" )
  629.                                     term.setCursorPos( xCursorPos, yCursorPos )
  630.                                     term.clearLine()
  631.                                     write( "Output redstone after cycle: " )
  632.                                     bOutput = read()
  633.                                     if bOutput == "true" or bOutput == "yes" or bOutput == "1" then
  634.                                             bOutput = true
  635.                                     elseif bOutput == "false" or bOutput == "no" or bOutput == "0" then
  636.                                             bOutput = false
  637.                                     else --if bOutput == "true" or bOutput == "yes" or bOutput == "1"
  638.                                             term.clearLine()
  639.                                             write( "Invalid Value" )
  640.                                             sleep( 0.5 )
  641.                                             term.clearLine()
  642.                                             bOutput = nil
  643.                                     end --if bOutput == "true" or bOutput == "yes" or bOutput == "1"
  644.                             end --while bOutput == nil
  645.                     end --if bEmptyLogs or bRebillSaplings
  646.                    
  647.                     if bOutput then
  648.                             for _, side in ipairs( rs.getSides() ) do
  649.                                     if tPeripheralType[side] ~= "modem" and tPeripheralType[side] ~= "workbench" then
  650.                                             local xCursorPos, yCursorPos = term.getCursorPos()
  651.                                             term.setCursorPos( xCursorPos, yCursorPos )
  652.                                             term.clearLine()
  653.                                             while tSides[side] == nil do
  654.                                                     header( "Settings:" )
  655.                                                     term.setCursorPos( xCursorPos, yCursorPos )
  656.                                                     term.clearLine()
  657.                                                     write( "Output on " .. side .. " side: " )
  658.                                                     tSides[side] = read()
  659.                                                     if tSides[side] == "true" or tSides[side] == "yes" or tSides[side] == "1" then
  660.                                                             tSides[side] = true
  661.                                                     elseif tSides[side] == "false" or tSides[side] == "no" or tSides[side] == "0" then
  662.                                                             tSides[side] = false
  663.                                                     else --if tSides[side] == "true" or tSides[side] == "yes" or tSides[side] == "1"
  664.                                                             term.clearLine()
  665.                                                             write( "Invalid Value" )
  666.                                                             sleep( 0.5 )
  667.                                                             term.clearLine()
  668.                                                             tSides[side] = nil
  669.                                                     end --if tSides[side] == "true" or tSides[side] == "yes" or tSides[side] == "1"
  670.                                             end --while tSides[side] == nil
  671.                                     end --if tPeripheralType[side] ~= "modem" and tPeripheralType[side] ~= "workbench"
  672.                             end --for i, side in ipairs( rs.getSides() )
  673.                     end --if bOutput
  674.                    
  675.                    
  676.             end --if sHarvestMode == "farm"
  677.            
  678.             writeToFile()
  679.            
  680.             clearAll()
  681.            
  682.     end --local function createSettings()
  683.      
  684.      
  685.      
  686.     local function saplingCheck()
  687.            
  688.             if not bLowSaplings and turtle.getItemCount( 1 ) < ( nRows * nTrees > 32 and 32 or ( nRows * nTrees < 9 and 9 or nRows * nTrees ) ) and turtle.getItemCount( 1 ) ~= 0 then
  689.                     bLowSaplings = true
  690.                     rednetSend( "loggerLowSaplings" )
  691.             end --if not bLowSaplings and turtle.getItemCount( 1 ) < ( nRows * nTrees > 32 and 32 or ( nRows * nTrees < 9 and 9 or nRows * nTrees ) ) and turtle.getItemCount( 1 ) ~= 0
  692.            
  693.             if not bNoSaplings and turtle.getItemSpace( 1 ) == 64 then
  694.                     bNoSaplings = true
  695.                     rednetSend( "loggerNoSaplings" )
  696.             end --if not bNoSaplings and turtle.getItemSpace( 1 ) == 64
  697.            
  698.     end --local function saplingCheck()
  699.      
  700.      
  701.      
  702.     local function output( _sState )
  703.            
  704.             if _sState == "on" then
  705.                     if bRefillSaplings or bEmptyLogs then
  706.                             for side, _ in pairs( tSides ) do
  707.                                     if tSides[side] then
  708.                                             rs.setOutput( side, true )
  709.                                     end --if tSides[side]
  710.                             end --for side, _ in ipairs( tSides )
  711.                     end --if bRefillSaplings or bEmptyLogs then
  712.             elseif _sState == "off" then
  713.                     for side, _ in pairs( tSides ) do
  714.                             if tSides[side] then
  715.                                     rs.setOutput( side, true )
  716.                             end --if tSides[side]
  717.                     end --for side, _ in ipairs( tSides )
  718.             end --if _sState
  719.            
  720.     end --local function output( _sState )
  721.      
  722.      
  723.      
  724.     local function emptyLogs()
  725.            
  726.             local slotCheck = bNoSaplings
  727.            
  728.             while true do
  729.                    
  730.                     for i = 2, 15 do
  731.                             if turtle.getItemSpace( 1 ) == 64 then
  732.                                     slotCheck = false
  733.                             end --if turtle.getItemSpace( 1 ) == 64
  734.                             i = i == 2 and ( slotCheck and 1 or 3 ) or i
  735.                             if turtle.getItemSpace( i ) ~= 64 then
  736.                                     break --for i = 3, 15
  737.                             else --turtle.getItemCount( i ) ~= 64
  738.                                     if i == 15 then
  739.                                             return true
  740.                                     end --if i == 15
  741.                             end --if turtle.getItemSpace( i ) ~= 64
  742.                     end --for i = 3, 15
  743.                    
  744.                     sleep( 0.01 )
  745.                    
  746.             end --while true
  747.            
  748.     end --local function emptyLogs()
  749.      
  750.      
  751.      
  752.     local function refillSaplings()
  753.            
  754.             while true do
  755.                    
  756.                     if turtle.getItemSpace( 1 ) == 0 then
  757.                             return true
  758.                     end --if turtle.getItemSpace == 0
  759.                    
  760.                     sleep( 0.01 )
  761.                    
  762.             end --while true
  763.            
  764.     end --local function refillSaplings()
  765.      
  766.      
  767.      
  768.     local function plantTree()
  769.             if bDebug then
  770.                     print( "plantTree" )
  771.             end --if bDebug
  772.            
  773.             saplingCheck()
  774.            
  775.             if not bNoSaplings and not turtle.compareDown() then
  776.                     if not turtle.detectDown() then
  777.                             select( 1 )
  778.                             if not turtle.placeDown() then
  779.                                     move( "down", 1, select() )
  780.                                     select( 2 )
  781.                                     turtle.placeDown()
  782.                                     move( "up", 1, select() )
  783.                                     select( 1 )
  784.                                     turtle.placeDown()
  785.                             end --if not turtle.placeDown()
  786.                     end --if not turtle.detectDown()
  787.             end --if not bNoSaplings and not turtle.compareDown()
  788.            
  789.             saplingCheck()
  790.            
  791.     end --local function plantTree()
  792.      
  793.      
  794.      
  795.     local function harvestTree()
  796.             if bDebug then
  797.                     print( "harvestTree" )
  798.             end --if bDebug
  799.            
  800.             move( "forward", 1, 3 )
  801.             if turtle.compareDown() then
  802.                     dig( "down" )
  803.             end --if turtle.compareDown()
  804.            
  805.             bar = foo
  806.             foo = 0
  807.            
  808.             while turtle.compareUp() do
  809.                    
  810.                     move( "up", 1, 3 )
  811.                     foo = foo + 1
  812.                     if foo == 20 then
  813.                             break --while true
  814.                     end --if foo == 20
  815.                    
  816.             end --while turtle.compareUp() do
  817.            
  818.             for i = 1, foo do
  819.                    
  820.                     move( "down", 1, 1 )
  821.                    
  822.             end --for i = 1, foo
  823.            
  824.             foo = bar
  825.             bar = nil
  826.            
  827.             plantTree()
  828.            
  829.     end --local function harvestTree()
  830.      
  831.      
  832.      
  833.     local function checkTree()
  834.             if bDebug then
  835.                     print( "checkTree" )
  836.             end --if bDebug
  837.            
  838.             if turtle.getItemSpace( 3 ) < 64 then
  839.                    
  840.                     select( 3 )
  841.                    
  842.                     if turtle.compare() then
  843.                             harvestTree()
  844.                     else --turtle.compare()
  845.                             move( "forward", 1, 1 )
  846.                             plantTree()
  847.                     end --if turtle.compare()
  848.                    
  849.             else --turtle.getItemSpace( 3 ) < 64
  850.                    
  851.                     if turtle.detect() then
  852.                             harvestTree()
  853.                     else --turtle.detect()
  854.                             move( "forward", 1, 1 )
  855.                             plantTree()
  856.                     end --if turtle.detect()
  857.                    
  858.             end --if turtle.getItemSpace < 64
  859.            
  860.             nTreesremaining = nTreesremaining - 1
  861.             header()
  862.             local xCursorPos, yCursorPos = term.getCursorPos()
  863.             term.setCursorPos( 1, 3 )
  864.             term.clearLine()
  865.             write( "Harvesting " .. nRows .. "x" .. nTrees .. ". " .. nTreesremaining .. ( nTreesremaining == 1 and " tree" or " trees" ) .. " remaining." )
  866.             term.setCursorPos( xCursorPos, yCursorPos )
  867.            
  868.     end --local function checkTree()
  869.      
  870.      
  871.      
  872.     local function harvest( _sHarvestMode )
  873.             if bDebug then
  874.                     print( "harvest" )
  875.             end --if bDebug
  876.            
  877.             if _sHarvestMode == "farm" then
  878.                    
  879.                     bLowSaplings = false
  880.                     bNoSaplings = false
  881.                    
  882.                     saplingCheck()
  883.                    
  884.                     nTreesremaining = nRows * nTrees
  885.                    
  886.                     if bUseFuel then
  887.                             while turtle.getFuelLevel() < ( ( nTreesremaining ) * 3 ) + ( nRows % 2 == 1 and ( nTrees * 3 ) or 1 ) + ( nRows * 3 ) - 2 do
  888.                                    
  889.                                     if turtle.getItemSpace( 16 ) ~= 64 then
  890.                                             select( 16 )
  891.                                     else --turtle.getItemSpace( 16 ) ~= 64
  892.                                             for i = 3, 15 do
  893.                                                     if turtle.getItemSpace( i ) ~= 64 then
  894.                                                             turtle.select( i )
  895.                                                             break --for i = 3, 15
  896.                                                     end --if turtle.getItemSpace( i ) ~= 64
  897.                                                     if i == 15 then
  898.                                                             print( "Need " .. ( ( ( nTreesremaining ) * 3 ) + ( nRows % 2 == 1 and ( nTrees * 3 ) or 1 ) + ( nRows * 3 ) - 2 ) - turtle.getFuelLevel() .. " more fuel." )
  899.                                                             sleep( 2 )
  900.                                                             return
  901.                                                     end --if i == 15
  902.                                             end --for i = 3, 15
  903.                                     end --if turtle.getItemSpace( 16 ) ~= 64
  904.                                     turtle.refuel( 1 )
  905.                                    
  906.                             end --while turtle.getFuelLevel() < ( ( nTreesremaining ) * 3 ) + ( nRows % 2 == 1 and ( nTrees * 3 ) or 1 ) + ( nRows * 3 ) - 2
  907.                     end --if bUseFuel
  908.                    
  909.                     if turtle.getItemCount( 1 ) < nTreesremaining then                    
  910.                             rednetSend( "loggerLowSaplings" )                      
  911.                     end --if turtle.getItemCount( 1 ) < nTreesremaining
  912.                    
  913.                    
  914.                     clearAll()
  915.                     print( "Harvesting " .. nRows .. "x" .. nTrees .. ". " .. nTreesremaining .. ( nTreesremaining == 1 and " tree" or " trees" ) .. " remaining." )
  916.                    
  917.                     move( "up", 1, 1 )
  918.                     checkTree()
  919.                    
  920.                     for i = 1, nRows do
  921.                            
  922.                             for i = 1, nTrees do
  923.                                    
  924.                                     if i ~= nTrees then
  925.                                            
  926.                                             move( "forward", 2, 1 )
  927.                                             checkTree()
  928.                                            
  929.                                     end --if i ~= nTrees
  930.                                    
  931.                             end --for i = 1, nTrees
  932.                            
  933.                             if i ~= nRows then
  934.                                     move( i % 2 == 0 and "right" or "left", 2, 1 )
  935.                                     checkTree()
  936.                                     move( i % 2 == 0 and "right" or "left", 0, 1 )
  937.                             end --if i ~= nRows
  938.                            
  939.                     end --for i = 1, nRows
  940.                    
  941.                     if nRows % 2 == 0 then
  942.                             move( "forward", 1, 1 )
  943.                             move( "left", 0, 1 )
  944.                     else --nRows % 2 == 0                                  
  945.                             move( "left", 1, 1 )
  946.                             move( "left", 0, 1 )
  947.                             move( "forward", ( nTrees * 3 ) - 2, 1 )
  948.                             move( "left", 1, 1 )
  949.                     end --if nRows % 2 == 0
  950.                    
  951.                     if nRows ~= 1 then
  952.                             move( "forward", ( nRows * 3 ) - 3, 1 )
  953.                     end --if nRows ~= 1
  954.                    
  955.                     move( "left", 0, 1 )                  
  956.                     move( "down", 1, 1 )
  957.                    
  958.                     output( "on" )
  959.                     if bEmptyLogs then
  960.                             if bRefillSaplings then
  961.                                     parallel.waitForAll( emptyLogs, refillSaplings )
  962.                             end --if bRefillSaplings
  963.                             parallel.waitForAll( emptyLogs )
  964.                     else --bEmptyLogs
  965.                             if bRefillSaplings then
  966.                                     parallel.waitForAll( refillSaplings )
  967.                             end --if bRefillSaplings
  968.                     end --if bEmptyLogs
  969.                     output( "off" )
  970.                    
  971.                    
  972.             elseif _sHarvestMode == "bonemeal" then
  973.                    
  974.                     while true do
  975.                            
  976.                             if not bKeyLog then
  977.                                    
  978.                                     clearAll()
  979.                                     print( "Press Any Key to Stop Logging" )
  980.                                    
  981.                                     if turtle.getItemSpace( 1 ) ~= 64 and turtle.getItemSpace( 2 ) ~= 64 then
  982.                                            
  983.                                             select( 1 )
  984.                                             if not turtle.compare() then
  985.                                                     while not turtle.place() do
  986.                                                             turtle.dig()
  987.                                                     end --while not turtle.place()
  988.                                             end --if turtle.compare()
  989.                                            
  990.                                             select( 2 )
  991.                                             if not turtle.place() then
  992.                                                     print( "Need bonemeal in slot 2" )
  993.                                                     sleep( 1 )
  994.                                                     return
  995.                                             end --if not turtle.place()
  996.                                            
  997.                                             move( "forward", 1, 3 )
  998.                                            
  999.                                             bar = foo
  1000.                                             foo = 1
  1001.                                            
  1002.                                             while turtle.compareUp() do
  1003.                                                    
  1004.                                                     move( "up", 1, 3 )
  1005.                                                     foo = foo + 1
  1006.                                                     if foo == 20 then
  1007.                                                             break --while turtle.compareUp()
  1008.                                                     end --if foo == 20
  1009.                                                    
  1010.                                             end --while turtle.compareUp()
  1011.                                            
  1012.                                             for i = 1, foo do
  1013.                                                     if i ~= foo then
  1014.                                                             move( "down", 1, 3 )
  1015.                                                     end --if i ~= foo
  1016.                                             end --for i = 1, foo
  1017.                                            
  1018.                                             foo = bar
  1019.                                             bar = nil
  1020.                                            
  1021.                                             move( "back", 1, 3 )
  1022.                                            
  1023.                                            
  1024.                                     else --if turtle.getItemSpace( 1 ) ~= 64 and turtle.getItemSpace( 2 ) ~= 64
  1025.                                            
  1026.                                             term.setCursorPos( 1, 3 )
  1027.                                             term.clearLine()
  1028.                                            
  1029.                                             if turtle.getItemSpace( 1 ) == 64 then
  1030.                                                     print( "Need saplings in slot 1" )
  1031.                                             end --if turtle.getItemSpace( 1 ) == 64
  1032.                                            
  1033.                                             if turtle.getItemSpace( 2 ) == 64 then
  1034.                                                     print( "Need bonemeal in slot 2" )
  1035.                                             end --if turtle.getItemSpace( 1 ) == 64
  1036.                                            
  1037.                                             sleep( 2 )
  1038.                                             return
  1039.                                            
  1040.                                     end --if turtle.getItemSpace( 1 ) ~= 64 and turtle.getItemSpace( 2 ) ~= 64
  1041.                                    
  1042.                             else --not keyLog
  1043.                                    
  1044.                                     break --while true
  1045.                                    
  1046.                             end --if not bKeyLog
  1047.                            
  1048.                     end --while true
  1049.                    
  1050.             end --if _sHarvestMode == "farm"
  1051.            
  1052.     end --local function harvest( _sHarvestMode, nRows, nTrees )
  1053.      
  1054.      
  1055.      
  1056.      
  1057.      
  1058.      
  1059.      
  1060.     --[[MAIN METHOD]]
  1061.      
  1062.      
  1063.     while true do
  1064.            
  1065.             if not loadSettings() then
  1066.                     createSettings()
  1067.             end --if not LoadSettings()
  1068.            
  1069.             rednet.open( "right" )
  1070.             baz = bUseBroadcast
  1071.            
  1072.             while true do
  1073.                     if baz then
  1074.                             clearAll( 1, 3, "Anonomit Tree Farmer #" .. os.computerID(), 5 )
  1075.                     else --baz
  1076.                             clearAll()
  1077.                     end --if baz
  1078.                     baz = bUseBroadcast
  1079.                     print( "Press 'r' to begin logging" )
  1080.                     print( "Press 's' to recreate settings" )
  1081.                             if bUseBroadcast then
  1082.                                     print( "Press 'c' to clear broadcast console" )
  1083.                             end --if bUseBroadcast
  1084.                    
  1085.                     local event, param1, param2, param3 = os.pullEvent()
  1086.                     if event == "char" and param1 == "r" then
  1087.                             rednetSend( "loggerLogging" )
  1088.                             if sHarvestMode == "farm" then
  1089.                                     harvest( sHarvestMode )
  1090.                             elseif sHarvestMode == "bonemeal" then
  1091.                                     parallel.waitForAny( function() harvest( sHarvestMode ) end, keyLog )
  1092.                             end --if sHarvestMode == "farm"
  1093.                             rednetSend( "loggerDoneLogging" )
  1094.                             print( "Press 'r' to begin logging" )
  1095.                             print( "Press 's' to recreate settings" )
  1096.                             if bUseBroadcast then
  1097.                                     print( "Press 'c' to clear broadcast console" )
  1098.                             end --if bUseBroadcast
  1099.                     elseif bUseBroadcast and param1 == nBroadcastID and event == "rednet_message" and param2 == "loggerStartLogging" then
  1100.                             rednetSend( "loggerLogging" )
  1101.                             if sHarvestMode == "farm" then
  1102.                                     harvest( sHarvestMode )
  1103.                             elseif sHarvestMode == "bonemeal" then
  1104.                                     parallel.waitForAny( function() harvest( sHarvestMode ) end, keyLog )
  1105.                             end --if sHarvestMode == "farm"
  1106.                             rednetSend( "loggerDoneLogging" )
  1107.                             print( "Press 'r' to begin logging" )
  1108.                             print( "Press 's' to recreate settings" )
  1109.                     elseif event == "char" and param1 == "s" then
  1110.                             createSettings()
  1111.                             break --while true
  1112.                     elseif event == "char" and param1 == "c" then
  1113.                             rednetSend( "loggerForget" )
  1114.                             local id, msg, dist = rednet.receive( 0.1 )
  1115.                             if id == nBroadcastID and msg == "loggerForgot" then
  1116.                                     local xCursorPos, yCursorPos = term.getCursorPos()
  1117.                                     term.setCursorPos( 1, yCursorPos - 1 )
  1118.                                     term.clearLine()
  1119.                                     print( "Cleared from Broadcast Console" )
  1120.                                     bUseBroadcast = false
  1121.                                     writeToFile()
  1122.                             else --id == nBroadcastID and msg == "loggerForgot"
  1123.                                     local xCursorPos, yCursorPos = term.getCursorPos()
  1124.                                     term.setCursorPos( 1, yCursorPos - 1 )
  1125.                                     term.clearLine()
  1126.                                     print( "No Response" )
  1127.                                     sleep( 0.5 )
  1128.                             end --if id == nBroadcastID and msg == "loggerForgot"
  1129.                     end --if event == "char" and param1 == "r"
  1130.             end --while true
  1131.            
  1132.     end --while true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement