Advertisement
Doob

[OpenComputers] smart_tube

Nov 29th, 2015
633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.57 KB | None | 0 0
  1. local component = require('component')
  2. local transposer = component.transposer
  3. local buffer = 3
  4. local tItems = {}
  5.  
  6. local function refresh() -- обновление информации о всех предметах во всех хранилищах
  7.   tItems = {}
  8.   for side = 0, 5 do
  9.     if side ~= buffer and transposer.getInventorySize(side) then
  10.       for slot = 1, transposer.getInventorySize(side) do
  11.         local item = transposer.getStackInSlot(side, slot)
  12.         if item ~= nil then
  13.           if not tItems[item.label] then
  14.             tItems[item.label] = {}
  15.           end
  16.           if not tItems[item.label][side] then
  17.             tItems[item.label][side] = {}
  18.           end
  19.           if not tItems[item.label][6] then
  20.             tItems[item.label][6] = 0
  21.           end
  22.           tItems[item.label][6] = tItems[item.label][6] + item.size
  23.           if item.size == nil then
  24.             tItems[item.label][side][slot] = 0
  25.           else
  26.             tItems[item.label][side][slot] = item.size
  27.           end
  28.         end
  29.       end
  30.     end
  31.   end
  32. end
  33.  
  34. local function counter(item) -- счетчик предметов определенного типа
  35.   local count = 0
  36.   for side = 0, 5 do
  37.     if side ~= buffer and transposer.getInventorySize(side) then
  38.       if tItems[item] ~= nil then
  39.         if tItems[item][side] ~= nil then
  40.           for slot = 1, #tItems[item][side] do
  41.             count = count + tItems[item][side][slot]
  42.           end
  43.         end
  44.       end
  45.     end
  46.   end
  47.   tItems[item][6] = count
  48.   return count
  49. end
  50.  
  51. local function fromBuffer() -- перемещение всех предметов из буфера в хранилища
  52.   for side = 0, 5 do
  53.     if side ~= buffer and transposer.getInventorySize(side) then
  54.       for i = 1, transposer.getInventorySize(buffer) do
  55.         transposer.transferItem(buffer, side)
  56.       end
  57.     end
  58.   end
  59. end
  60.  
  61. local function toBuffer(item, amount) -- перемещение заданного предмета из хранилищ в буфер
  62.   if tItems[item][6] >= amount then
  63.     for side = 0, 5 do
  64.       if side ~= buffer and transposer.getInventorySize(side) then
  65.         if tItems[item] ~= nil then
  66.           if tItems[item][side] ~= nil then
  67.             for slot = 1, #tItems[item][side] do
  68.               if tItems[item][side][slot] ~= nil then
  69.                 if tItems[item][side][slot] >= amount then
  70.                   transposer.transferItem(side, buffer, amount, slot)
  71.                   tItems[item][side][slot] = tItems[item][side][slot] - amount
  72.                   tItems[item][6] = tItems[item][6] - amount
  73.                   return true
  74.                 elseif tItems[item][side][slot] <= amount then
  75.                   transposer.transferItem(side, buffer, tItems[item][side][slot], slot)
  76.                   tItems[item][6] = tItems[item][6] - tItems[item][side][slot]
  77.                   amount = amount - tItems[item][side][slot]
  78.                 end
  79.                 if amount == 0 then
  80.                   return true
  81.                 end
  82.               end
  83.             end
  84.           end
  85.         end
  86.       end
  87.     end
  88.   else
  89.     return false
  90.   end
  91. end
  92.  
  93. ----------------------------------------------------------
  94. local term = require('term')
  95. local event = require('event')
  96. local tbl = {}
  97. local index = 1
  98.  
  99. local function ref(svx)
  100.   term.clear()
  101.   print('Обновление информации...')
  102.   if svx then
  103.     refresh()
  104.   end
  105.   tbl = {}
  106.   for i, j in pairs(tItems) do
  107.     table.insert(tbl, i)
  108.   end
  109. end
  110.  
  111. local function main()
  112.   while 1 do
  113.     term.clear()
  114.     print('[TAB]\t\tвыбрать предмет\n[Enter]\t\tполучить предмет\n[Backspace]\tзагрузить предметы из буфера\n[R]\t\tобновить информацию\n[Q]\t\tвыйти из программы\n')
  115.     print(tItems[tbl[index]][6], tbl[index])
  116.     local e = {event.pull('key_down')}
  117.     if e[4] == 15 then
  118.       if index ~= #tbl then
  119.         index = index + 1
  120.       else
  121.         index = 1
  122.       end
  123.     elseif e[4] == 19 then
  124.       ref(true)
  125.     elseif e[4] == 28 then
  126.       term.clear()
  127.       term.write('Введите количество [максимум ' .. tItems[tbl[index]][6] .. ']: ')
  128.       toBuffer(tbl[index], tonumber(io.read()))
  129.       ref()
  130.     elseif e[4] == 14 then
  131.       term.clear()
  132.       print('Загрузка предметов...')
  133.       fromBuffer()
  134.       ref(true)
  135.     elseif e[4] == 16 then
  136.      term.clear()
  137.       os.exit()
  138.     end
  139.   end
  140. end
  141.  
  142. ref(true)
  143. main()
  144. ----------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement