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 bridge = component.openperipheral_bridge
- local unicode = require('unicode')
- local event = require('event')
- local tList = {}
- local page = 0
- local tHelp = {
- {20, 50, '$$< или $$>'},
- {20, 60, '$$G [номер] [количество]'},
- {20, 70, '$$R'},
- {20, 80, '$$B'},
- {200, 50, 'листать список предметов'},
- {200, 60, 'получить предмет'},
- {200, 70, 'обновить информацию о предметах'},
- {200, 80, 'загрузить предметы из буфера'}
- }
- local tbl = {}
- local k = 120
- for j = 1, 10 do
- tbl[j] = {13, k}
- tbl[j+10] = {218, k}
- k = k + 15
- end
- local function ref(svx)
- if svx then
- refresh()
- end
- tList = {}
- for i, j in pairs(tItems) do
- table.insert(tList, i)
- end
- end
- local function writeH()
- bridge.addBox(10, 30, 400, 80, 0x000000).setOpacity(70)
- bridge.addText(13, 35, 'Введите команду в чате', 0x008888)
- for i = 1, #tHelp do
- bridge.addText(tHelp[i][1], tHelp[i][2], tHelp[i][3], 0xCCCCCC)
- end
- end
- local function writeI()
- local color = 0x000000
- for b = 116, 251, 15 do
- if color == 0x000000 then
- color = 0x444444
- else
- color = 0x000000
- end
- bridge.addBox(10, b, 196, 15, color).setOpacity(70)
- bridge.addBox(214, b, 196, 15, color).setOpacity(70)
- end
- for i = 1+page, #tbl+page do
- if tList[i] ~= nil then
- bridge.addText(tbl[i][1], tbl[i][2], i .. '', 0xFFFF00)
- bridge.addText(tbl[i][1]+23, tbl[i][2], tItems[tList[i]][6] .. '', 0x00FF00)
- bridge.addText(tbl[i][1]+52, tbl[i][2], unicode.sub(tList[i], 1, 23), 0x00FFFF)
- end
- end
- end
- local function main()
- while 1 do
- bridge.clear()
- writeH()
- writeI()
- bridge.sync()
- local e = {event.pull('glasses_chat_command')}
- local cmd = string.upper(string.sub(e[5], 1, 1))
- if cmd == '>' then
- if tList[page+20] ~= nil then
- page = page + 20
- end
- elseif cmd == '<' then
- if tList[page-20] ~= nil then
- page = page - 20
- end
- elseif cmd == 'G' then
- local number, amount = string.match(string.sub(e[5], 2, #e[5]), '([0-9]+) ([0-9]+)')
- toBuffer(tList[tonumber(number)+page], tonumber(amount))
- ref()
- elseif cmd == 'B' then
- fromBuffer()
- ref(true)
- elseif cmd == 'R' then
- ref(true)
- end
- end
- end
- ref(true)
- print('готов к работе')
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement