jake5253

Untitled

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