Guest User

a

a guest
Nov 30th, 2016
103
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local com = require("component")
  2. local robot = require("robot")
  3. local term = require("term")
  4.  
  5. local vcegoyacheek = robot.inventorySize()        -- определение сколько всего ячеек, присвоение постоянной этого значения
  6.  
  7. -- Соединение материала в полные пачки (64 шт в пачке - максимум)
  8.  
  9. local function popolnit()               -- функция пополнения текущей ячейки до максимума из ячеек, следующих за текущей
  10.   local NAN = robot.select()              -- начальный индекс при входе в цикл, позволяет вернуться в начальную ячейку
  11. --  local NZN = NAN + 1                 -- следующий индекс, прижимает остатки в угол, отделяя готовое от не готового.
  12.   for i = (NAN + 1), vcegoyacheek do          -- идем до конца отсчета ячеек хранения, отталкиваясь от уже готового
  13.     if (robot.compareTo(i) == true) and (robot.space() ~= 0) then -- подбирает одинаковые ячейки для объединения (сравнивается активная с текущей) и исключает полные пачки
  14.       robot.select(i)               -- выбрать текущую ячейку (сделать её активной, сбросив активность с начальной ячейки)
  15.       robot.transferTo(NAN,robot.space(NAN))    -- перенести предметы из текущей ячейки в начальную ячейку; перенос в кол-ве, необходимым до максимума в нач.ячейке
  16.       robot.select(NAN)             -- снова сделать активной Начальную ячейку, чтобы в следующем цикле сравнение было правильным, собираем ячейки идущие за "следующей".
  17.       if robot.space(NAN) == 0 then         -- Если пачка уже полна, то пора выходить из цикла
  18.         break
  19.       end
  20.     end
  21.  
  22.   end
  23. end
  24.  
  25. local function edin()                   -- Функция объединения одинаковых ячеек
  26.   for i = 1, vcegoyacheek do
  27.     robot.select(i)                 -- встаем на текущую ячейку
  28.    
  29.     -- проверяем: "а она не пустая?";"а она не полная?"; - тогда заполнить её из других ячеек, до возможного максимума
  30.     if (robot.count() > 0) and (robot.space() ~= 0) then
  31.       popolnit()
  32.     end
  33.   end
  34. end
  35.  
  36. -- Уплотнение.
  37. -- Уплотнение нужно чтобы строительный материал всегда был у робота "под рукой", без пробелов между пачками
  38. local function perenoc()                -- в пустую ячейку перенести содержимое любой не пустой ячейки из оставшихся вариантов
  39.   local NAN = robot.select()              -- начальный индекс при входе в цикл, позволяет вернуться в начальную ячейку
  40. --  local NZN = NAN + 1                 -- следующий индекс, прижимает остатки в угол, отделяя готовое от не готового.
  41.   for i = (NAN + 1), vcegoyacheek do
  42.     if (robot.count(i) > 0) and (robot.count(NAN) == 0) then  -- верно для не пустой текущей ячейки и пустой начальной ячейки, соответственно
  43.       robot.select(i)               -- выбрать текущую ячейку (сделать её активной, сбросив активность с начальной ячейки)
  44.       robot.transferTo(NAN)           -- перенести предметы из текущей ячейки в начальную ячейку; перенос в кол-ве, необходимым до максимума в нач.ячейке
  45.       robot.select(NAN)             -- снова сделать активной Начальную ячейку, чтобы в следующем цикле сравнение было правильным, собираем ячейки идущие за "следующей".
  46.     end
  47.   end
  48. end
  49.  
  50. -- уплотнение хранилища, упорядочивание пачек так, чтобы пачки шли одна за другой
  51. local function ryad()
  52.   for i=1, vcegoyacheek do
  53.     robot.select(i)                 --встаем на текущую ячейку
  54.     if robot.count() == 0 then
  55.       perenoc()
  56.     end
  57.   end
  58. end
  59.  
  60. edin()  -- находит пачку с материалом и, если не пустая, то дополняет её таким же материалом из последующих ячеек
  61. ryad()  -- Устанавливает пачки в ряд, так, чтобы не было пробелов между пачками
RAW Paste Data