Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require('component')
- local transposer = component.transposer
- local buffer = 3
- local tItems = {}
- local function refresh() -- обновление информации о всех предметах во всех хранилищах
- tItems = {}
- for side = 0, 5 do
- if side ~= buffer and transposer.getInventorySize(side) then
- for slot = 1, transposer.getInventorySize(side) do
- local item = transposer.getStackInSlot(side, slot)
- if item ~= nil then
- if not tItems[item.label] then
- tItems[item.label] = {}
- end
- if not tItems[item.label][side] then
- tItems[item.label][side] = {}
- end
- if not tItems[item.label][6] then
- tItems[item.label][6] = 0
- end
- tItems[item.label][6] = tItems[item.label][6] + item.size
- if item.size == nil then
- tItems[item.label][side][slot] = 0
- else
- tItems[item.label][side][slot] = item.size
- end
- end
- end
- end
- end
- end
- local function counter(item) -- счетчик предметов определенного типа
- local count = 0
- for side = 0, 5 do
- if side ~= buffer and transposer.getInventorySize(side) then
- if tItems[item] ~= nil then
- if tItems[item][side] ~= nil then
- for slot = 1, #tItems[item][side] do
- count = count + tItems[item][side][slot]
- end
- end
- end
- end
- end
- tItems[item][6] = count
- return count
- end
- local function fromBuffer() -- перемещение всех предметов из буфера в хранилища
- for side = 0, 5 do
- if side ~= buffer and transposer.getInventorySize(side) then
- for i = 1, transposer.getInventorySize(buffer) do
- transposer.transferItem(buffer, side)
- end
- end
- end
- end
- local function toBuffer(item, amount) -- перемещение заданного предмета из хранилищ в буфер
- if tItems[item][6] >= amount then
- for side = 0, 5 do
- if side ~= buffer and transposer.getInventorySize(side) then
- if tItems[item] ~= nil then
- if tItems[item][side] ~= nil then
- for slot = 1, #tItems[item][side] do
- if tItems[item][side][slot] ~= nil then
- if tItems[item][side][slot] >= amount then
- transposer.transferItem(side, buffer, amount, slot)
- tItems[item][side][slot] = tItems[item][side][slot] - amount
- tItems[item][6] = tItems[item][6] - amount
- return true
- elseif tItems[item][side][slot] <= amount then
- transposer.transferItem(side, buffer, tItems[item][side][slot], slot)
- tItems[item][6] = tItems[item][6] - tItems[item][side][slot]
- amount = amount - tItems[item][side][slot]
- end
- if amount == 0 then
- return true
- end
- end
- end
- end
- end
- end
- end
- else
- return false
- end
- end
- ----------------------------------------------------------
- local term = require('term')
- local event = require('event')
- local tbl = {}
- local index = 1
- local function ref(svx)
- term.clear()
- print('Обновление информации...')
- if svx then
- refresh()
- end
- tbl = {}
- for i, j in pairs(tItems) do
- table.insert(tbl, i)
- end
- end
- local function main()
- while 1 do
- term.clear()
- print('[TAB]\t\tвыбрать предмет\n[Enter]\t\tполучить предмет\n[Backspace]\tзагрузить предметы из буфера\n[R]\t\tобновить информацию\n[Q]\t\tвыйти из программы\n')
- print(tItems[tbl[index]][6], tbl[index])
- local e = {event.pull('key_down')}
- if e[4] == 15 then
- if index ~= #tbl then
- index = index + 1
- else
- index = 1
- end
- elseif e[4] == 19 then
- ref(true)
- elseif e[4] == 28 then
- term.clear()
- term.write('Введите количество [максимум ' .. tItems[tbl[index]][6] .. ']: ')
- toBuffer(tbl[index], tonumber(io.read()))
- ref()
- elseif e[4] == 14 then
- term.clear()
- print('Загрузка предметов...')
- fromBuffer()
- ref(true)
- elseif e[4] == 16 then
- term.clear()
- os.exit()
- end
- end
- end
- ref(true)
- main()
- ----------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement