Здравствуйте, собираю прогу для выдачи предметов из нескольких сундуков.
Дошёл до самого конца, в принципе она уже и предмет сможет выдать через костыль, но я хочу чтобы она это делала по нажатию одной кнопки.
пишу под mineOS.
Первая прога под его гуи апи, поэтому грешу на сборщик кнопок. но как это реализовать по другому не знаю.
собсна - main.lua
local component=require("component")local chests = require("chests")local cr=component.redstone
local ct=component.transposer
local GUI = require("GUI")local system = require("System")local items = chests.getStorageItems()local slots={}---- Выдача предметов----Копирование таблицы в новый экземплярfunction table.copy(t)local u ={}for k, v in pairs(t)do u[k]= v endreturn setmetatable(u, getmetatable(t))end----подготовка списка предметов для выводаfunction getScreenItems(name)local screenItems ={}if name ==""thenfor o,_ in pairs(items)doif o<=80then
table.insert(screenItems, items[o])--print(screenItems[#screenItems].label)endendelsefor itm,_ in pairs(items)do
fnd = string.find(unicode.lower(items[itm].label),unicode.lower(name))if fnd~=nill then
table.insert(screenItems, items[itm])endendendreturn screenItems
end
screenItems = getScreenItems("")--------------------------------------------------------------------------------------- Add a new window to MineOS workspacelocal workspace, window, menu = system.addWindow(GUI.filledWindow(1,1,160,50,0xE1E1E1,addTitlePanel))--window:maximize() -- раскрыть на весь экран -- Get localization table dependent of current system languagelocal localization = system.getCurrentScriptLocalization()-- собираю гуиlocal layout = window:addChild(GUI.layout(1,1, window.width, window.height,1,3))
layout:setRowHeight(1,GUI.SIZE_POLICY_RELATIVE,0.08)
layout:setRowHeight(2,GUI.SIZE_POLICY_RELATIVE,0.8)--layout.showGrid = truelocal layout1 = layout:setPosition(1,2, layout:addChild(GUI.layout(1,1, layout.width, layout.height*0.8,4,1)))--поисковая строка
finder = layout:setPosition(1,3,layout:addChild(GUI.input(2,2,30,3,0xEEEEEE,0x555555,0x999999,0xFFFFFF,0x2D2D2D,"","Item name")))
finder.historyEnabled =true
finder.onInputFinished =function()
screenItems = getScreenItems(finder.text)
drawbtn(screenItems)
workspace:draw()end---------------------------------layout1.showGrid = true
layout1:setColumnWidth(1,GUI.SIZE_POLICY_RELATIVE,0.25)
layout1:setColumnWidth(2,GUI.SIZE_POLICY_RELATIVE,0.25)
layout1:setColumnWidth(3,GUI.SIZE_POLICY_RELATIVE,0.25)
layout1:setColumnWidth(4,GUI.SIZE_POLICY_RELATIVE,0.25)-- Сборщик кнопокfunction drawbtn(screenItems)
layout1:removeChildren()for i=1,20,1dofor o =1,4,1do
id=(o-1)*20+i
if#screenItems>=id then
btn = layout1:setPosition(o,1, layout1:addChild(GUI.button(0,0,(layout.width/4)-2,1,0xEEEEEE,0x000000,0xAAAAAA,0x0, screenItems[id].label)))
btn.id = id
elseendendendfor o,_ in pairs(layout1.children)do
layout1.children[o].onTouch =function()--GUI.alert(screenItems[o].name)
slots=chests.issueItem(screenItems[o])--ct.transferItem(slots[1], 1, _, slots[2])-- ошибка при трансфереendendend
drawbtn(screenItems)-- Customize MineOS menu for this application by your willlocal contextMenu = menu:addContextMenuItem("File")
contextMenu:addItem("New")
contextMenu:addSeparator()
contextMenu:addItem("Open")
contextMenu:addItem("Save",true)
contextMenu:addItem("Save as")
contextMenu:addSeparator()
contextMenu:addItem("Close").onTouch =function()
window:remove()end-- You can also add items without context menu
menu:addItem("выдать").onTouch =function()--GUI.alert("It works!")
ct.transferItem(slots[1],1, _, slots[2])end-- Create callback function with resizing rules when window changes its' size
window.onResize =function(newWidth, newHeight)
window.backgroundPanel.width, window.backgroundPanel.height = newWidth, newHeight
layout.width, layout.height = newWidth, newHeight
layout1.width, layout1.height = newWidth, newHeight*0.8end----------------------------------------------------------------------------------- Draw changes on screen after customizing your window
workspace:draw()--GUI.alert(component.transposer.getAllStacks(2).getAll()[1])
cr.setOutput(2,0)--print(items[1].label)--ct.transferItem(2, 1, _, 1, 1)
Здравствуйте, собираю прогу для выдачи предметов из нескольких сундуков.
Дошёл до самого конца, в принципе она уже и предмет сможет выдать через костыль, но я хочу чтобы она это делала по нажатию одной кнопки.
пишу под mineOS.
Первая прога под его гуи апи, поэтому грешу на сборщик кнопок. но как это реализовать по другому не знаю.
собсна - main.lua
библиотечка chests.lua
ошибка, наверно это недостаток памяти, хз
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах