Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------Ne menyat'-----------------------------------
- if not fs.exists("goto") then
- shell.run( "pastebin","get","UaViLJQP","goto" ) --skachivaem API
- end
- os.loadAPI("goto") --load gotopoint API
- ---------------------------------------------------------------------
- --------------Menyat'----------------------------------------------
- ---------------------------------------------------------------------
- local sleeptime = 600 -- vremya ozhidaniya rosta bobov
- local rowsDirection = "x" -- napravlenie ryadov po X ili po Z
- local rowsGap = 1 -- promezhutok mejdu ryadami s bobami (0 esli sploshnoe)
- local homeLocation = "home" -- tochka dlya ozhidaniya rosta bobov / otdiha. Ykazivaem (nazvanie ili koordinati), naprimer local homeLocation = {556, 45, 1478}
- local farmArea = {}
- farmArea[1] = {["x"] = 549, ["y"] = 50, ["z"] = 1481} --- 1ya tochka pervogo yrovnya ryadov
- farmArea[2] = {["x"] = 563, ["y"] = 50, ["z"] = 1493} --- 2ya tochka pervogo yrovnya ryadov
- farmArea[3] = {["x"] = 549, ["y"] = 53, ["z"] = 1482} --- 1ya tochka vtorogo yrovnya ryadov
- farmArea[4] = {["x"] = 563, ["y"] = 53, ["z"] = 1492} --- 2ya tochka vtorogo yrovnya ryadov
- farmArea[5] = {["x"] = 549, ["y"] = 56, ["z"] = 1481} --- i tak dalee
- farmArea[6] = {["x"] = 563, ["y"] = 56, ["z"] = 1493} ---
- ---------------------------------------------------------------------
- local levelPoints = {}
- local prevAspect = ""
- local informing = false
- -------------------------Util------------------------------
- function debugInfo(...)
- if not informing then return end
- local args = unpack(arg)
- for k, v in pairs(args) do
- local line = ""
- if type(v) == "table" then
- for _, value in pairs(v) do
- line = line..tostring(value).." "
- end
- print(line)
- else
- for k, v in pairs(args) do
- if args[k] ~= nil then
- line = line..tostring(args[k]).." "
- end
- end
- print(line)
- break
- end
- end
- end
- function searchInArray(array,value)
- local keysArray = {}
- for k, v in pairs(array) do
- if v == value then
- table.insert(keysArray, k)
- end
- end
- if #keysArray == 0 then
- return false
- else
- return keysArray
- end
- end
- function searchInDeepArray(array, indexName, value)
- local keysArray = {}
- for key, data in pairs(array) do
- if data[indexName] == value then
- table.insert(keysArray, key)
- end
- end
- if #keysArray == 0 then
- return false
- else
- return keysArray
- end
- end
- function makeMath()
- local yArray = {}
- for i = 1, #farmArea do
- if not searchInArray(yArray, farmArea[i]["y"]) then
- table.insert(yArray, farmArea[i]["y"])
- end
- end
- table.sort(yArray)
- debugInfo(yArray)
- for g = 1, #yArray do
- levelPointsIndexes = searchInDeepArray(farmArea, "y", yArray[g])
- local tempArray = {}
- for i = 1, #levelPointsIndexes do
- table.insert(tempArray, farmArea[levelPointsIndexes[i]])
- end
- local minX = tempArray[1]["x"]
- local minZ = tempArray[1]["z"]
- local maxX = minX
- local maxZ = minZ
- for i = 1, #tempArray do
- if tempArray[i]["x"] < minX then
- minX = tonumber(tempArray[i]["x"])
- elseif tempArray[i]["x"] > maxX then
- maxX = tonumber(tempArray[i]["x"])
- end
- if tempArray[i]["z"] < minZ then
- minZ = tonumber(tempArray[i]["z"])
- elseif tempArray[i]["z"] > maxZ then
- maxZ = tonumber(tempArray[i]["z"])
- end
- end
- table.insert(levelPoints, {yArray[g], minX, maxX, minZ, maxZ})
- debugInfo({yArray[g], minX, maxX, minZ, maxZ})
- end
- end
- -------------------------Beans----------------------------------
- function gatherBean()
- if peripheral.getType("top") == "tt_aspectContainer" then
- local a = peripheral.call("top", "getAspects")
- if #a ~= 0 then
- if tostring(a[1]) ~= prevAspect then
- local slot = goto.findEmptySlot("force")
- turtle.select(slot[1])
- prevAspect = tostring(a[1])
- end
- goto.mov.digUp()
- goto.mov.placeUp()
- end
- end
- end
- function beans()
- for i = 1, #levelPoints do
- y = levelPoints[i][1]
- if rowsDirection == "x" then
- local movingOrient = 3
- for z = tonumber(levelPoints[i][4]), tonumber(levelPoints[i][5]), 1+tonumber(rowsGap) do
- if movingOrient == 3 then
- for x = tonumber(levelPoints[i][2]), tonumber(levelPoints[i][3]) do
- goto.go(x, y, z, movingOrient)
- gatherBean()
- end
- movingOrient = 1
- else
- for x = tonumber(levelPoints[i][3]), tonumber(levelPoints[i][2]), -1 do
- goto.go(x, y, z, movingOrient)
- gatherBean()
- end
- movingOrient = 3
- end
- end
- else
- local movingOrient = 0
- for x = tonumber(levelPoints[i][2]), tonumber(levelPoints[i][3]), 1+tonumber(rowsGap) do
- if movingOrient == 0 then
- for z = tonumber(levelPoints[i][4]), tonumber(levelPoints[i][5]) do
- goto.go(x, y, z, movingOrient)
- gatherBean()
- end
- movingOrient = 2
- else
- for z = tonumber(levelPoints[i][5]), tonumber(levelPoints[i][4]), -1 do
- goto.go(x, y, z, movingOrient)
- gatherBean()
- end
- movingOrient = 0
- end
- end
- end
- end
- end
- -------------------------Execution----------------------------------
- term.setCursorPos(1,1)
- term.clear()
- makeMath()
- while true do
- term.setCursorPos(1,2)
- print("Checking fuel level...")
- goto.checkFuel(10000)
- print("Gathering beans...")
- beans()
- if sleeptime ~= 0 then
- if type(homeLocation) == "string" then
- goto.go(homeLocation)
- else
- goto.go(homeLocation[1], homeLocation[2], homeLocation[3])
- end
- goto.emptyInventory()
- for i = 0, sleeptime, sleeptime/10 do
- term.setCursorPos(1,1)
- term.clear()
- term.setCursorPos(1,2)
- esttime = math.floor(sleeptime - i)
- print("Waiting for growth. Estimate time ",esttime)
- sleep(sleeptime/10)
- end
- end
- term.setCursorPos(1,1)
- term.clear()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement