Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local com = require("component")
- local robot = require("robot")
- local term = require("term")
- local vcegoyacheek = robot.inventorySize() -- определение сколько всего ячеек, присвоение постоянной этого значения
- -- Соединение материала в полные пачки (64 шт в пачке - максимум)
- local function popolnit() -- функция пополнения текущей ячейки до максимума из ячеек, следующих за текущей
- local NAN = robot.select() -- начальный индекс при входе в цикл, позволяет вернуться в начальную ячейку
- -- local NZN = NAN + 1 -- следующий индекс, прижимает остатки в угол, отделяя готовое от не готового.
- for i = (NAN + 1), vcegoyacheek do -- идем до конца отсчета ячеек хранения, отталкиваясь от уже готового
- if (robot.compareTo(i) == true) and (robot.space() ~= 0) then -- подбирает одинаковые ячейки для объединения (сравнивается активная с текущей) и исключает полные пачки
- robot.select(i) -- выбрать текущую ячейку (сделать её активной, сбросив активность с начальной ячейки)
- robot.transferTo(NAN,robot.space(NAN)) -- перенести предметы из текущей ячейки в начальную ячейку; перенос в кол-ве, необходимым до максимума в нач.ячейке
- robot.select(NAN) -- снова сделать активной Начальную ячейку, чтобы в следующем цикле сравнение было правильным, собираем ячейки идущие за "следующей".
- if robot.space(NAN) == 0 then -- Если пачка уже полна, то пора выходить из цикла
- break
- end
- end
- end
- end
- local function edin() -- Функция объединения одинаковых ячеек
- for i = 1, vcegoyacheek do
- robot.select(i) -- встаем на текущую ячейку
- -- проверяем: "а она не пустая?";"а она не полная?"; - тогда заполнить её из других ячеек, до возможного максимума
- if (robot.count() > 0) and (robot.space() ~= 0) then
- popolnit()
- end
- end
- end
- -- Уплотнение.
- -- Уплотнение нужно чтобы строительный материал всегда был у робота "под рукой", без пробелов между пачками
- local function perenoc() -- в пустую ячейку перенести содержимое любой не пустой ячейки из оставшихся вариантов
- local NAN = robot.select() -- начальный индекс при входе в цикл, позволяет вернуться в начальную ячейку
- -- local NZN = NAN + 1 -- следующий индекс, прижимает остатки в угол, отделяя готовое от не готового.
- for i = (NAN + 1), vcegoyacheek do
- if (robot.count(i) > 0) and (robot.count(NAN) == 0) then -- верно для не пустой текущей ячейки и пустой начальной ячейки, соответственно
- robot.select(i) -- выбрать текущую ячейку (сделать её активной, сбросив активность с начальной ячейки)
- robot.transferTo(NAN) -- перенести предметы из текущей ячейки в начальную ячейку; перенос в кол-ве, необходимым до максимума в нач.ячейке
- robot.select(NAN) -- снова сделать активной Начальную ячейку, чтобы в следующем цикле сравнение было правильным, собираем ячейки идущие за "следующей".
- end
- end
- end
- -- уплотнение хранилища, упорядочивание пачек так, чтобы пачки шли одна за другой
- local function ryad()
- for i=1, vcegoyacheek do
- robot.select(i) --встаем на текущую ячейку
- if robot.count() == 0 then
- perenoc()
- end
- end
- end
- edin() -- находит пачку с материалом и, если не пустая, то дополняет её таким же материалом из последующих ячеек
- ryad() -- Устанавливает пачки в ряд, так, чтобы не было пробелов между пачками
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement