Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Turtle collects glowberries FOREVER.
- -- Version: 1.5
- local modeLabel = 'vertical'
- local logFileLabel = 'log.csv'
- local logFile = nil
- local intervalLabel = 'interval'
- local intervalTime = 60
- local timestamp = 0
- local largestAge = 0
- local ageLimit = 24
- local totalAge = 0
- local timeRangeLabel = 'timeRange'
- local timeRange = 60
- local vineSpot = 0
- local fuelLevel = 0
- local isFirstRun = true
- local aerialCount = 0
- local function Setup()
- -- You need to place blocks with internal inventory in front and below.
- -- The front inventory should be at the same height as the highest height of the Cave vines.
- local totalBerries = 0
- local oneMinute = 60
- local function UnloadingBerries()
- for i = 1, 16 do
- local berries = turtle.getItemCount(i)
- if (0 < berries) then
- turtle.select(i)
- if (not turtle.dropDown()) then
- repeat
- print('\nThe inventory at my feet is full.\nDo empty anyway!!')
- sleep(oneMinute)
- until turtle.dropDown()
- end
- totalBerries = totalBerries + berries
- end
- end
- end
- UnloadingBerries()
- if (turtle.getSelectedSlot ~= 1) then
- turtle.select(1)
- end
- while (turtle.getItemCount() ~= 0) do
- print("Maybe inventory at my feet is full?\nAh, I don't feel like doing it anymore.")
- sleep(oneMinute)
- UnloadingBerries()
- end
- -- If there are more routes than fuelLimit, it will not be considered.
- if (vineSpot == 0) then
- vineSpot = 4
- end
- while (turtle.getFuelLevel() < ageLimit * 2 * vineSpot) do
- turtle.suck(1)
- if (not turtle.refuel()) then
- print("I'm hungry. Please give me something to eat!!")
- sleep(oneMinute)
- end
- end
- -- At least later than the second time.
- if (timestamp ~= 0) then
- local elapsedTime = os.clock() - timestamp
- local consumedFuelLevel = turtle.getFuelLevel() - fuelLevel
- logFile.writeLine(
- intervalTime .. ', ' ..
- elapsedTime .. ', ' ..
- consumedFuelLevel .. ', ' ..
- vineSpot .. ', ' ..
- totalAge .. ', ' ..
- totalBerries
- )
- logFile.flush()
- if (largestAge < ageLimit) then
- intervalTime = intervalTime + timeRange
- else
- if (timeRange <= 1) then
- timeRange = math.ceil(timeRange / 2)
- local currentTimeRange = fs.open(timeRangeLabel, 'w')
- currentTimeRange.write(timeRange)
- currentTimeRange.close()
- end
- intervalTime = intervalTime - timeRange
- end
- local currentIntervalTime = fs.open(intervalLabel, 'w')
- currentIntervalTime.write(intervalTime)
- currentIntervalTime.close()
- end
- totalAge = 0
- vineSpot = 0
- fuelLevel = turtle.getFuelLevel()
- print('Current interval time: ' .. intervalTime .. 's')
- if (isFirstRun) then
- isFirstRun = false
- else
- sleep(intervalTime)
- timestamp = os.clock()
- end
- end
- local function VerticalCollect()
- fs.open(modeLabel, 'w')
- local age = 0
- local isBlock, dataValues = turtle.inspect()
- repeat
- age = age + 1
- turtle.down()
- isBlock, dataValues = turtle.inspect()
- until (not isBlock or not string.find(dataValues.name, 'plant'))
- if (largestAge < age) then
- largestAge = age
- end
- local depth = age + 1
- repeat
- isBlock, dataValues = turtle.inspect()
- if (isBlock and dataValues.state.berries) then
- -- You need to equip the turtle with an Axe.
- turtle.dig()
- end
- depth = depth - 1
- if (depth == 1) then
- turtle.dig()
- end
- until (not turtle.up())
- totalAge = totalAge + age
- vineSpot = vineSpot + 1
- fs.delete(modeLabel)
- end
- -- Initialize
- if (fs.exists(intervalLabel)) then
- local savedIntervalTime = fs.open(intervalLabel, 'r')
- intervalTime = tonumber(savedIntervalTime.readLine())
- savedIntervalTime.close()
- print('Startup interval time:' .. intervalTime .. 's')
- end
- if (fs.exists(timeRangeLabel)) then
- local savedTimeRange = fs.open(timeRangeLabel, 'r')
- timeRange = tonumber(savedTimeRange.readLine())
- savedTimeRange.close()
- end
- if (fs.exists(modeLabel)) then
- print('Run reset process.')
- while (turtle.up()) do end
- fs.delete(modeLabel)
- end
- if (not fs.exists(logFileLabel)) then
- local file = fs.open(logFileLabel, 'w')
- file.writeLine('Interval time,Elapsed time,Consumed fuel,Vine spot,Total age,Total berries')
- file.close()
- end
- logFile = fs.open(logFileLabel, 'a')
- -- Main loop
- while true do
- local isBlock, dataValue = turtle.inspect()
- if (isBlock) then
- if (string.find(dataValue.name, 'vines')) then
- VerticalCollect()
- elseif (string.find(dataValue.name, 'dispenser')) then
- Setup()
- end
- turtle.turnRight()
- aerialCount = 0
- else
- turtle.forward()
- if (aerialCount % 2 == 0) then
- turtle.turnLeft()
- end
- aerialCount = aerialCount + 1
- end
- end
Advertisement
Advertisement