-- relies on two detecting tubes and one digilines injector -- available tube informs the system of new items -- sent tube informs the system of successfully sent items -- send is the channel the injector uses if event.type == "program" then mem.queue = mem.queue or {} mem.inventory = mem.inventory or {} mem.centrifuge = mem.centrifuge or {} mem.inventory["technic:uranium0_dust"] = -500000 mem.inventory["technic:uranium35_dust"] = -500000 interrupt(1) elseif event.type == "interrupt" then interrupt(1) if #mem.queue > 0 then mem.queue[1].time = mem.queue[1].time - 1 if mem.queue[1].time <= 0 then local command = table.remove(mem.queue, 1) if command.action == "increment" then if not mem.inventory[command.name] then mem.inventory[command.name] = 0 end mem.inventory[command.name] = mem.inventory[command.name] + 1 elseif command.action == "send" then digiline_send("send", command.name) end end mem.sent = false elseif not mem.sent then local choice, current current = 0 for name, count in pairs(mem.inventory) do if count > current then choice = name current = count end end if choice and current > 1 then if current % 2 == 0 then current = current - 2 else current = current - 1 end digiline_send("send", choice) while current > 0 do table.insert(mem.queue, { time = 2, name = choice, action = "send" }) current = current - 1 end mem.sent = true end end elseif event.type == "digiline" then if event.channel == "available" then table.insert(mem.queue, { time = 6, name = event.msg, action = "increment" }) elseif event.channel == "sent" then if not mem.inventory[event.msg] then mem.inventory[event.msg] = 0 end mem.inventory[event.msg] = mem.inventory[event.msg] - 1 if not mem.centrifuge[event.msg] then mem.centrifuge[event.msg] = 0 end mem.centrifuge[event.msg] = mem.centrifuge[event.msg] + 1 end end