Advertisement
Spacie

2

Nov 19th, 2015
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.70 KB | None | 0 0
  1. -------------Ne menyat'-----------------------------------
  2. if not fs.exists("goto") then
  3.     shell.run( "pastebin","get","UaViLJQP","goto" ) --skachivaem API
  4. end
  5. os.loadAPI("goto") --load gotopoint API
  6. ---------------------------------------------------------------------
  7. --------------Menyat'----------------------------------------------
  8. ---------------------------------------------------------------------
  9. local sleeptime = 600 -- vremya ozhidaniya rosta bobov
  10. local rowsDirection = "x" -- napravlenie ryadov po X ili po Z
  11. local rowsGap = 1 -- promezhutok mejdu ryadami s bobami (0 esli sploshnoe)
  12. local homeLocation = "home" -- tochka dlya ozhidaniya rosta bobov / otdiha. Ykazivaem (nazvanie ili koordinati), naprimer local homeLocation = {556, 45, 1478}
  13. local farmArea = {}
  14. farmArea[1] = {["x"] = 549, ["y"] = 50, ["z"] = 1481} --- 1ya tochka pervogo yrovnya ryadov
  15. farmArea[2] = {["x"] = 563, ["y"] = 50, ["z"] = 1493} --- 2ya tochka pervogo yrovnya ryadov
  16. farmArea[3] = {["x"] = 549, ["y"] = 53, ["z"] = 1482} --- 1ya tochka vtorogo yrovnya ryadov
  17. farmArea[4] = {["x"] = 563, ["y"] = 53, ["z"] = 1492} --- 2ya tochka vtorogo yrovnya ryadov
  18. farmArea[5] = {["x"] = 549, ["y"] = 56, ["z"] = 1481} --- i tak dalee
  19. farmArea[6] = {["x"] = 563, ["y"] = 56, ["z"] = 1493} ---
  20. ---------------------------------------------------------------------
  21.  
  22. local levelPoints = {}
  23. local prevAspect = ""
  24. local informing = false
  25. -------------------------Util------------------------------
  26. function debugInfo(...)
  27.     if not informing then return end
  28.     local args = unpack(arg)
  29.     for k, v in pairs(args) do
  30.         local line = ""
  31.         if type(v) == "table" then
  32.             for _, value in pairs(v) do
  33.                 line = line..tostring(value).." "
  34.             end
  35.             print(line)
  36.         else
  37.             for k, v in pairs(args) do
  38.                 if args[k] ~= nil then
  39.                     line = line..tostring(args[k]).." "
  40.                 end
  41.             end
  42.             print(line)
  43.             break
  44.         end
  45.     end
  46. end
  47. function searchInArray(array,value)
  48.     local keysArray  = {}
  49.     for k, v in pairs(array) do
  50.       if v == value then
  51.         table.insert(keysArray, k)
  52.       end
  53.     end
  54.     if #keysArray == 0 then
  55.         return false
  56.     else
  57.         return keysArray
  58.     end
  59. end
  60. function searchInDeepArray(array, indexName, value)
  61.     local keysArray  = {}
  62.     for key, data in pairs(array) do
  63.         if data[indexName] == value then
  64.             table.insert(keysArray, key)
  65.         end
  66.     end
  67.     if #keysArray == 0 then
  68.         return false
  69.     else
  70.         return keysArray
  71.     end
  72. end
  73. function makeMath()
  74.     local yArray = {}
  75.     for i = 1, #farmArea do
  76.         if not searchInArray(yArray, farmArea[i]["y"]) then
  77.             table.insert(yArray, farmArea[i]["y"])
  78.         end
  79.     end
  80.     table.sort(yArray)
  81.     debugInfo(yArray)
  82.     for g = 1, #yArray do
  83.         levelPointsIndexes = searchInDeepArray(farmArea, "y", yArray[g])
  84.         local tempArray = {}
  85.         for i = 1, #levelPointsIndexes do
  86.             table.insert(tempArray, farmArea[levelPointsIndexes[i]])
  87.         end
  88.         local minX = tempArray[1]["x"]
  89.         local minZ = tempArray[1]["z"]
  90.         local maxX = minX
  91.         local maxZ = minZ
  92.         for i = 1, #tempArray do
  93.             if tempArray[i]["x"] < minX then
  94.                 minX = tonumber(tempArray[i]["x"])
  95.             elseif tempArray[i]["x"] > maxX then
  96.                 maxX = tonumber(tempArray[i]["x"])
  97.             end
  98.             if tempArray[i]["z"] < minZ then
  99.                 minZ = tonumber(tempArray[i]["z"])
  100.             elseif tempArray[i]["z"] > maxZ then
  101.                 maxZ = tonumber(tempArray[i]["z"])
  102.             end
  103.         end
  104.         table.insert(levelPoints, {yArray[g], minX, maxX, minZ, maxZ})
  105.         debugInfo({yArray[g], minX, maxX, minZ, maxZ})
  106.     end
  107. end
  108. -------------------------Beans----------------------------------
  109. function gatherBean()
  110.     if peripheral.getType("top") == "tt_aspectContainer" then
  111.         local a = peripheral.call("top", "getAspects")
  112.         if #a ~= 0 then
  113.             if tostring(a[1]) ~= prevAspect then
  114.                 local slot = goto.findEmptySlot("force")
  115.                 turtle.select(slot[1])
  116.                 prevAspect =  tostring(a[1])
  117.             end
  118.             goto.mov.digUp()
  119.             goto.mov.placeUp()
  120.         end
  121.     end
  122. end
  123. function beans()
  124.     for i = 1, #levelPoints do
  125.         y = levelPoints[i][1]
  126.         if rowsDirection == "x" then
  127.             local movingOrient = 3
  128.             for z = tonumber(levelPoints[i][4]), tonumber(levelPoints[i][5]), 1+tonumber(rowsGap) do
  129.                 if movingOrient == 3 then
  130.                     for x = tonumber(levelPoints[i][2]), tonumber(levelPoints[i][3]) do
  131.                         goto.go(x, y, z, movingOrient)
  132.                         gatherBean()
  133.                     end
  134.                     movingOrient = 1
  135.                 else
  136.                     for x = tonumber(levelPoints[i][3]), tonumber(levelPoints[i][2]), -1 do
  137.                         goto.go(x, y, z, movingOrient)
  138.                         gatherBean()
  139.                     end
  140.                     movingOrient = 3
  141.                 end
  142.             end
  143.         else
  144.             local movingOrient = 0
  145.             for x = tonumber(levelPoints[i][2]), tonumber(levelPoints[i][3]), 1+tonumber(rowsGap) do
  146.                 if movingOrient == 0 then
  147.                     for z = tonumber(levelPoints[i][4]), tonumber(levelPoints[i][5]) do
  148.                         goto.go(x, y, z, movingOrient)
  149.                         gatherBean()
  150.                     end
  151.                     movingOrient = 2
  152.                 else
  153.                     for z = tonumber(levelPoints[i][5]), tonumber(levelPoints[i][4]), -1 do
  154.                         goto.go(x, y, z, movingOrient)
  155.                         gatherBean()
  156.                     end
  157.                     movingOrient = 0
  158.                 end
  159.             end
  160.         end
  161.     end
  162. end
  163. -------------------------Execution----------------------------------               
  164.  
  165. term.setCursorPos(1,1)
  166. term.clear()
  167. makeMath()
  168. while true do
  169.     term.setCursorPos(1,2)
  170.     print("Checking fuel level...")
  171.     goto.checkFuel(10000)
  172.     print("Gathering beans...")
  173.     beans()
  174.     if sleeptime ~= 0 then
  175.         if type(homeLocation) == "string" then
  176.             goto.go(homeLocation)
  177.         else
  178.             goto.go(homeLocation[1], homeLocation[2], homeLocation[3])
  179.         end
  180.         goto.emptyInventory()
  181.         for i = 0, sleeptime, sleeptime/10 do
  182.             term.setCursorPos(1,1)
  183.             term.clear()
  184.             term.setCursorPos(1,2)
  185.             esttime = math.floor(sleeptime - i)
  186.             print("Waiting for growth. Estimate time ",esttime)
  187.             sleep(sleeptime/10)
  188.         end
  189.     end
  190.     term.setCursorPos(1,1)
  191.     term.clear()
  192. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement