Перейти к содержимому

Поиск по сайту

Результаты поиска по тегам 'transposer'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Путешествия Xytabich'а
  • Рецепты программирования
  • Шкодим по крупному
  • 123
  • mineOS и её удивительный мир
  • Поляна говнокода Bumer 32

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Корзина

Группы продуктов

Нет результатов для отображения.


Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


ICQ


Yahoo


Jabber


ВКонтакте


Город


Интересы

Найдено 3 результата

  1. Добрый день, Я пишу выдавальщик предметов с огромного кол-ва слотов, сейчас программа работает медлеено и я ищу способы для ускорения работы с транспозерами и таблицами сейчас у меня 4 транспозера с четырьмя сундуками на каждом. В каждом сундуке по 117 слотов и в общем 1872 ячейки в системе. при запуске программы, после выполнения поиска и после выдачи предмета выполняется этот код: function chest.getStorageItems() local tpTable = {} local thisItems = {} local allItems = {} for k in component.list("transposer") do table.insert(tpTable,k) end for index, tp in pairs(tpTable) do for i=0,5,1 do if (component.invoke(tp, "getInventoryName", i)) and (i~=5) then thisItems = component.invoke(tp, "getAllStacks", i).getAll() for o,thisItm in pairs(thisItems) do if (thisItm.name~="minecraft:air") then local this = false for g,allItm in pairs(allItems) do if ((this==false) and (allItm.name == thisItm.name) and (allItm.label == thisItm.label)) then this = true allItm.count = allItm.count+thisItm.size end end if this == false then table.insert(allItems, {name = thisItm.name, count = thisItm.size, label = thisItm.label}) end end end end end end return allItems end Сверху идёт провод, а выдача происходит на север. Каждый раз проверять сундуки надо потому что поставка предметов идёт не через систему и во время работы программы нужный предмет может появиться. Это обновление сейчас занимает 2-3 секунды, можно ли как-то ускорить этот процесс?
  2. Здравствуйте, собираю прогу для выдачи предметов из нескольких сундуков. Дошёл до самого конца, в принципе она уже и предмет сможет выдать через костыль, но я хочу чтобы она это делала по нажатию одной кнопки. пишу под 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 end return setmetatable(u, getmetatable(t)) end ----подготовка списка предметов для вывода function getScreenItems(name) local screenItems = {} if name == "" then for o,_ in pairs(items) do if o<=80 then table.insert(screenItems, items[o]) --print(screenItems[#screenItems].label) end end else for 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]) end end end return screenItems end screenItems = getScreenItems("") ---- --------------------------------------------------------------------------------- -- Add a new window to MineOS workspace local workspace, window, menu = system.addWindow(GUI.filledWindow(1, 1, 160, 50, 0xE1E1E1,addTitlePanel)) --window:maximize() -- раскрыть на весь экран -- Get localization table dependent of current system language local 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 = true local 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,1 do for o = 1,4,1 do 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 else end end end for 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])-- ошибка при трансфере end end end drawbtn(screenItems) -- Customize MineOS menu for this application by your will local 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.8 end --------------------------------------------------------------------------------- -- 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) библиотечка chests.lua local chest = {} local component=require("component") local ct=component.transposer function chest.getStorageItems() local allItems = {} local thisItems = {} for i=0,5,1 do if ((ct.getInventoryName(i)) and (i~=1)) then local thisItems = ct.getAllStacks(i).getAll() for o,_ in pairs(thisItems) do if (thisItems[o].name~="minecraft:air") then local thisIt = false for g,_ in pairs(allItems) do if ((thisIt==false) and (allItems[g].name == thisItems[o].name) and (allItems[g].label == thisItems[o].label)) then thisIt = true allItems[g].count = allItems[g].count+thisItems[o].size end end if thisIt == false then table.insert(allItems, {name = thisItems[o].name, count = thisItems[o].size, label = thisItems[o].label}) end end end end end return allItems end function chest.issueItem(itm) local suka = {0,0} local thisIt = false for i=0,5,1 do if ((thisIt==false)and(ct.getInventoryName(i)) and (i~=1)) then local thisItems = ct.getAllStacks(i).getAll() for o,_ in pairs(thisItems) do if (thisItems[o].name~="minecraft:air") then if (thisIt==false) and (thisItems[o].name == itm.name) and (thisItems[o].label == itm.label) then suka = {i,o} thisIt=true end end end end end thisItems={} return suka end return chest ошибка, наверно это недостаток памяти, хз
  3. Многие плачут по трубам, но у нас есть транспозер! Долго думал, зачем нужен этот скрипт. Хотел применить для того, чтобы закидывать себе в инвентарь предметы через Inventory Binder, когда я далеко от дома (например на рынке), но т. к. чанклоадеры нам не светят, смысла от этого нет. В общем, суть такова - имеется 4 функции, одна проверяет все контейнеры пристыкованные к транспозеру и заполняет таблицу предметов (в каком контейнере сколько и каких предметов лежит) Остальные работают с этой таблицей. tItems = { [item_label] = { -- таблица для предмета создается по его лейблу [side] = { -- информация о контейнере по определенную сторону [slot] = size,-- количество предметов в слоте [slot] = size, .... }, [6] = count -- дополнительный счетчик, указывающий сколько всего предметов данного типа } } Один контейнер считается буфером - из него забираются запрошенные предметы и раскладываются по хранилищам. (строка #3, сторону задавать через sides API) Функции: "обновить" - заполняет таблицу. "из буфера" - перемещает все предметы из буфера в хранилища "в буфер" - принимает лейбл предмета и количество, ищет указанные предметы и перемещает в буфер pastebin get gjRz1uB4 /bin/s_tube.lua Функцию main сделал на коленке, так что ногами не пинать. Хотел сделать нормальную GUIшку, но не дошли руки. В планах сделать скрипт последовательной биндилки активных транспозеров, чтобы создавать цепи из хранилищ и буферов (автоматическое расширение хранилищ) Думаю, может кому-то пригодится, хотя особого отличия от функции поиска через контроллер инвентаря нет, но никто про транспозер не говорит, только ноют, что труб нет.
×
×
  • Создать...