Advertisement
Zom115

Collect Glowberries

Sep 15th, 2023 (edited)
715
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.84 KB | Gaming | 0 0
  1. -- Turtle collects glowberries FOREVER.
  2. -- Version: 1.5
  3.  
  4. local modeLabel = 'vertical'
  5.  
  6. local logFileLabel = 'log.csv'
  7. local logFile = nil
  8. local intervalLabel = 'interval'
  9. local intervalTime = 60
  10. local timestamp = 0
  11. local largestAge = 0
  12. local ageLimit = 24
  13. local totalAge = 0
  14. local timeRangeLabel = 'timeRange'
  15. local timeRange = 60
  16. local vineSpot = 0
  17. local fuelLevel = 0
  18.  
  19. local isFirstRun = true
  20. local aerialCount = 0
  21.  
  22. local function Setup()
  23.   -- You need to place blocks with internal inventory in front and below.
  24.   -- The front inventory should be at the same height as the highest height of the Cave vines.
  25.  
  26.   local totalBerries = 0
  27.   local oneMinute = 60
  28.   local function UnloadingBerries()
  29.     for i = 1, 16 do
  30.       local berries = turtle.getItemCount(i)
  31.       if (0 < berries) then
  32.         turtle.select(i)
  33.         if (not turtle.dropDown()) then
  34.           repeat
  35.             print('\nThe inventory at my feet is full.\nDo empty anyway!!')
  36.             sleep(oneMinute)
  37.           until turtle.dropDown()
  38.         end
  39.         totalBerries = totalBerries + berries
  40.       end
  41.     end
  42.   end
  43.   UnloadingBerries()
  44.  
  45.   if (turtle.getSelectedSlot ~= 1) then
  46.     turtle.select(1)
  47.   end
  48.   while (turtle.getItemCount() ~= 0) do
  49.     print("Maybe inventory at my feet is full?\nAh, I don't feel like doing it anymore.")
  50.     sleep(oneMinute)
  51.     UnloadingBerries()
  52.   end
  53.  
  54.   -- If there are more routes than fuelLimit, it will not be considered.
  55.   if (vineSpot == 0) then
  56.     vineSpot = 4
  57.   end
  58.  
  59.   while (turtle.getFuelLevel() < ageLimit * 2 * vineSpot) do
  60.     turtle.suck(1)
  61.     if (not turtle.refuel()) then
  62.       print("I'm hungry. Please give me something to eat!!")
  63.       sleep(oneMinute)
  64.     end
  65.   end
  66.  
  67.   -- At least later than the second time.
  68.   if (timestamp ~= 0) then
  69.     local elapsedTime = os.clock() - timestamp
  70.     local consumedFuelLevel = turtle.getFuelLevel() - fuelLevel
  71.     logFile.writeLine(
  72.       intervalTime .. ', ' ..
  73.       elapsedTime .. ', ' ..
  74.       consumedFuelLevel .. ', ' ..
  75.       vineSpot .. ', ' ..
  76.       totalAge .. ', ' ..
  77.       totalBerries
  78.     )
  79.     logFile.flush()
  80.  
  81.     if (largestAge < ageLimit) then
  82.       intervalTime = intervalTime + timeRange
  83.     else
  84.       if (timeRange <= 1) then
  85.         timeRange =  math.ceil(timeRange / 2)
  86.         local currentTimeRange = fs.open(timeRangeLabel, 'w')
  87.         currentTimeRange.write(timeRange)
  88.         currentTimeRange.close()
  89.       end
  90.       intervalTime = intervalTime - timeRange
  91.     end
  92.     local currentIntervalTime = fs.open(intervalLabel, 'w')
  93.     currentIntervalTime.write(intervalTime)
  94.     currentIntervalTime.close()
  95.   end
  96.  
  97.   totalAge = 0
  98.   vineSpot = 0
  99.   fuelLevel = turtle.getFuelLevel()
  100.   print('Current interval time: ' .. intervalTime .. 's')
  101.   if (isFirstRun) then
  102.     isFirstRun = false
  103.   else
  104.     sleep(intervalTime)
  105.     timestamp = os.clock()
  106.   end
  107. end
  108.  
  109. local function VerticalCollect()
  110.   fs.open(modeLabel, 'w')
  111.   local age = 0
  112.   local isBlock, dataValues = turtle.inspect()
  113.  
  114.   repeat
  115.     age = age + 1
  116.     turtle.down()
  117.     isBlock, dataValues = turtle.inspect()
  118.   until (not isBlock or not string.find(dataValues.name, 'plant'))
  119.  
  120.   if (largestAge < age) then
  121.     largestAge = age
  122.   end
  123.   local depth = age + 1
  124.  
  125.   repeat
  126.     isBlock, dataValues = turtle.inspect()
  127.     if (isBlock and dataValues.state.berries) then
  128.       -- You need to equip the turtle with an Axe.
  129.       turtle.dig()
  130.     end
  131.     depth = depth - 1
  132.     if (depth == 1) then
  133.       turtle.dig()
  134.     end
  135.   until (not turtle.up())
  136.  
  137.   totalAge = totalAge + age
  138.   vineSpot = vineSpot + 1
  139.   fs.delete(modeLabel)
  140. end
  141.  
  142. -- Initialize
  143. if (fs.exists(intervalLabel)) then
  144.   local savedIntervalTime = fs.open(intervalLabel, 'r')
  145.   intervalTime = tonumber(savedIntervalTime.readLine())
  146.   savedIntervalTime.close()
  147.   print('Startup interval time:' .. intervalTime .. 's')
  148. end
  149.  
  150. if (fs.exists(timeRangeLabel)) then
  151.   local savedTimeRange = fs.open(timeRangeLabel, 'r')
  152.   timeRange = tonumber(savedTimeRange.readLine())
  153.   savedTimeRange.close()
  154. end
  155.  
  156. if (fs.exists(modeLabel)) then
  157.   print('Run reset process.')
  158.   while (turtle.up()) do end
  159.   fs.delete(modeLabel)
  160. end
  161.  
  162. if (not fs.exists(logFileLabel)) then
  163.   local file = fs.open(logFileLabel, 'w')
  164.   file.writeLine('Interval time,Elapsed time,Consumed fuel,Vine spot,Total age,Total berries')
  165.   file.close()
  166. end
  167. logFile = fs.open(logFileLabel, 'a')
  168.  
  169. -- Main loop
  170. while true do
  171.   local isBlock, dataValue = turtle.inspect()
  172.   if (isBlock) then
  173.     if (string.find(dataValue.name, 'vines')) then
  174.       VerticalCollect()
  175.     elseif (string.find(dataValue.name, 'dispenser')) then
  176.       Setup()
  177.     end
  178.     turtle.turnRight()
  179.     aerialCount = 0
  180.   else
  181.     turtle.forward()
  182.     if (aerialCount % 2 == 0) then
  183.       turtle.turnLeft()
  184.     end
  185.     aerialCount = aerialCount + 1
  186.   end
  187. end
Advertisement
Comments
  • Zom115
    1 year (edited)
    Comment was deleted
  • Zom115
    1 year
    Comment was deleted
Add Comment
Please, Sign In to add comment
Advertisement