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

Teen_Romance

Пользователи
  • Публикации

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

  • Посещение

Сообщения, опубликованные пользователем Teen_Romance


  1. А как вообще можно юзать дефолтные библиотеки в программах на этой os? Типа как написать какое то консольное приложение с io.read()?
    или как заюзать event.listen() дефолтный? они ведь лежат вроде рядом, но не понятно как их использовать


  2. А как сейчас этой либой и смежными ей можно воспользоваться без установки MineOs? Попросил чатик, он мне написал простенький скрипт чтобы скачать все файлы на комп:
    Чета типо этого

    Скрытый текст
    
    local internet = require("internet")
    local filesystem = require("filesystem")
    
    -- Базовый URL репозитория
    local baseURL = "https://raw.githubusercontent.com/IgorTimofeev/MineOS/master/Libraries/"
    -- Список файлов для загрузки
    local files = {
        "Base64.lua",
        "BigLetters.lua",
        "Bit32.lua",
        "Color.lua",
        "Component.lua",
        "Compressor.lua",
        "Event.lua",
        "Filesystem.lua",
        "GUI.lua",
        "Image.lua",
        "Internet.lua",
        "JSON.lua",
        "Keyboard.lua",
        "Network.lua",
        "Number.lua",
        "Paths.lua",
        "SHA-256.lua",
        "Screen.lua",
        "Sides.lua",
        "System.lua",
        "Text.lua",
        "Vector.lua",
        "XML.lua"
    }
    
    -- Целевая директория для сохранения библиотек
    local targetDir = "/lib/"
    
    -- Функция для загрузки файла
    local function downloadFile(url, path)
        local handle, err = internet.request(url)
        if not handle then
            io.stderr:write("Ошибка подключения: " .. (err or "неизвестная ошибка") .. "\n")
            return false
        end
    
        local file, err = io.open(path, "wb")
        if not file then
            io.stderr:write("Ошибка создания файла: " .. (err or "неизвестная ошибка") .. "\n")
            return false
        end
    
        for chunk in handle do
            file:write(chunk)
        end
    
        file:close()
        return true
    end
    
    -- Создание целевой директории, если она не существует
    if not filesystem.isDirectory(targetDir) then
        filesystem.makeDirectory(targetDir)
    end
    
    -- Загрузка файлов
    for _, file in ipairs(files) do
        local url = baseURL .. file
        local path = targetDir .. file
        print("Загрузка " .. file .. " из " .. url)
        if downloadFile(url, path) then
            print("Файл успешно сохранён: " .. path)
        else
            print("Не удалось загрузить: " .. file)
        end
    end
    
    print("Загрузка завершена. Библиотеки сохранены в " .. targetDir)

     

    После установки я попробовал запустить простенькую программу:
     

    Скрытый текст
    
    local component = require("component")
    local event = require("event")
    local gpu = component.gpu
    local GUI = require("GUI")
    
    -- Создаем графическое окно
    local workspace = GUI.workspace()
    
    -- Создаем главный контейнер
    local mainContainer = workspace:addChild(GUI.container(1, 1, gpu.getResolution()))
    
    -- Заголовок
    mainContainer:addChild(GUI.label(1, 1, mainContainer.width, 3, 0xFFFFFF, "Простой Калькулятор"))
        :setAlignment(GUI.ALIGNMENT_HORIZONTAL_CENTER, GUI.ALIGNMENT_VERTICAL_TOP)
    
    -- Поля для ввода чисел
    local input1 = mainContainer:addChild(GUI.input(10, 5, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 1"))
    local input2 = mainContainer:addChild(GUI.input(10, 9, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 2"))
    
    -- Место для результата
    local resultLabel = mainContainer:addChild(GUI.label(10, 13, 30, 3, 0xFFFFFF, "Результат: -"))
    
    -- Кнопка для выполнения сложения
    local addButton = mainContainer:addChild(GUI.button(10, 15, 20, 3, 0xAAAAAA, 0x000000, 0x888888, 0xFFFFFF, "Сложить"))
    
    -- Обработчик события для кнопки
    addButton.onTouch = function()
        local number1 = tonumber(input1.text)
        local number2 = tonumber(input2.text)
    
        if number1 and number2 then
            resultLabel.text = "Результат: " .. (number1 + number2)
        else
            resultLabel.text = "Ошибка ввода!"
        end
    end
    
    -- Запуск программы
    workspace:draw()
    workspace:start()

     

    И при запуске у меня все время какие то ошибки в либах этих выскакивают:
    /lib/Event.lua: attempt to index a nil value (global 'computer')
    фиксишь его - потом еще в filesystem component nil, потом filesystem  мне комп ломает почему то тем что из за ошибок я файлы редактировать не могу.
    Я не верю что на гите код какой то кривой лежит, но где меня чатик обманул?

    upd:
    я так понял не получится ничего потому что 

     :(


  3. Вообщем в тоге получилось если вот так энкодить русские строки перед отправкой:

    function urlencode(str)
        local encoded = ""
        for i = 1, unicode.len(str) do
            local char = unicode.sub(str, i, i)
            local byteSeq = {string.byte(char, 1, -1)}
    
            for _, byte in ipairs(byteSeq) do
                encoded = encoded .. string.format("%%%02X", byte)
            end
        end
        return encoded
    end

    И от так от декодить:

    URLDecoder.decode(body.get("field"), "UTF-8")

    Хотелось бы конечно как то на серваке указать что то чтобы оно без моего вмешательства разбиралсь че к чему, но не понятно же какую кодировку указывать. Тупа UTF-8 не пашет)


  4. 6 часов назад, ov3rwrite сказал:

    Любые Unicode символы в JSON

    Почему именно в JSON? Тут же больше про саму lua как я понимаю, так как в консоль \ файл \ pastebin результат JSON:encode() выводится нормально.

    Я в итоге так и не могу прийти к решению этого всего)) Я понял что символы оно в какой то момент превращает в \uXXXX но я не понимаю в какой и как пофиксить и где. Перед самой отправкой в lua в консоли мне выводит 
    image.png.c5ed645d767826d930e471b48d6eac5f.png
    а уже на сервере(java Spring boot) у меня
    {"field":"������, ���!"}


  5. Есть код который табличку тестовую конвертит в json строку и пытается отправить на сервер POST запросом:

    local function test()
        local url = "http://localhost"
    
        local headers = {
            ["Content-Type"] = "text/plain"
        }
        local body = {
            field = "поле"
        }
    
        local encodedBody = JSON:encode(body)
        local handle = internet.request(url, encodedBody, headers)
    
        for chunk in handle do
            print(chunk)
        end
    end

    Это все принимает эндпоинт мой и принтит в консоль. Дело в том, что русские символы как то плохо кодируются, и у меня в зависимости от хедера, на сервере получается 

    %7B%22field%22%3A%22%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%22%7D= (без хедера)

    или
    {"field":"����"} (с хедером)
    Как мне зафорсить это все в utf-8 чтобы на сервере приходили нормальные символы? Это не проблема json библиотеки, потому что даже если строку "привет" передать в request() как body, то результат тот же.
    Плюс если я отправляю строку с русскими символами через postman то в консоли сервера тоже нормально отображаются русские символы


  6. 5 минут назад, eu_tomat сказал:

    Я проверил на версии MineTweaker3-1.7.10-3.0.10B.jar

    Цитата

    Возможно, конфликтуют какие-то из модов.

    Спасибо! Скорее всего так и есть, потому что моды то я с сервера выгрузил пачкой 120+ шутк)

    Я на самом деле, уже думаю, что лучше руками(почти) их просто посоздавать. Потому что в ae2 у меня в основном на один предмет будет один рецепт. Если же выгружать их(рецепты) все пачкой, то тяжело потом будет разобраться какой рецепт использовать для посчета ресурсов, так как на один предмет может быть 2+ крафтов - интерфейс например.


  7. Есть сервер с Open Computer 1.7.10. Я хотел бы сделать подобие AE2(часть про автокрафты, чтобы показывало скок чего не хватает на крафт чего то) но на компах. чтобы на варпе можно было пользоваться. Мне бы для этого базу каую то с рецептами. Кто то знает как можно экспортировать рецепты с игры в json? Чатик тут про minetweaker подсказывает. Я пытался скрипт написать чтобы в лог написал все рецепты либо в игре /mt recipes но в логах NPE случается. 

    Понимаю что вопрос возможно вообще не по адресу и нужно бы больше деталей...


  8. Где можно почитать как работать с PIM? Я чета вообще не могу понять как его подключить к компу + мэ системе. Нашел только его методы и какие то куски коды на гите типа 

    local pim = proxy("pim")

    но что такое proxy - я не знаю. 

    Я так понимаю, что proxy, это метод component. А как тогда proxy сделали глобальным методом?

    Я вот подключил pim через адаптер, но как с ним работать с мэ + ивенты слушать - пока что загадка

     

    в идеале мне нужно чтобы у меня пим  стоял сверху, под ним мэ интерфейс и снизу адаптер. В общем чтобы только пим сверху торчал


  9. @ProgramCrafter
    Содержимое библиотеки изначально:
     

    Скрытый текст

    image.png.4d87559b22bbb95d84e5e33c7002a5e3.png

    Добавляем строку в /lib/package.lua:

    Скрытый текст

    image.png.538a32248eb2fdd05bb0d941bd0c20c6.png

    Сохраняем и меняем библиотеку(меняем точку на 15):

    Скрытый текст

    image.png.4831235c9a03bd619d7bcac28c590dee.png

    Сохраняем, запускаем изначальный код который юзает библиотеку:

    Скрытый текст

    image.png.7161c5efc6513407d5b10b2a104c910d.png

    Результат тот же :(

     

    Я это все делаю в Ocelot эмуляторе, но не думаю что это влияет как то


  10. Создал "библиотеку", положил в /lib/<name>.lua. Она работает. Изменил библиотеку, но изменения не учитываются при ее использовании после изменений.

    В документации нашел вот это:
     

    Цитата

    Returns library defined by name. First, if the library has been loaded previously, the package library will have cached it and require will return the cached version of the library. For unloading a precached library, see package.loaded. If the library is not cached, the package.path is searched until a match is found.

    package это у нас библиотека для загрузки библиотек, понятно. Но "For unloading precached library, see package.loaded.", не очень понятное объяснение. В поле loaded лежит таблица с hardcoded стандартными либами. Я не понимаю, новые библиотеки тоже кешируются или только те что указаны? Если новые тоже кешируются, что вероятно, то как это офнуть? 


  11. @ECS спасибо за ответ. My bad я не до конца написал что хочу. Большой текст должен находиться на одном экране с текстом поменьше. В центре что то вроде счетчика и сбоку кнопочки и обычный текст. https://prnt.sc/-4Lfi8jY5bSP


  12. Мне нужно нарисовать текст(не статический) размером 1\3 высоты экрана. Как бы это лучше всего реализовать? Есть идея построчно рисовать ASCII символами, но решил спросить тут. Должны быть варианты получше.


  13. Блин. Два лучших ответа тут нельзя выбрать)

    3 минуты назад, whiskas сказал:

    И в конце замены можеш стержень назад возвращать)

    Еще и стержень можно вернуть. Звучит отлично. Пока что самый оптимальный вариант. Вечером попробую провернуть


  14. @whiskas интересные идеи. По поводу пустого слота. Я так понимаю, чтобы такое провернуть, нужна подходящая схема, в которой этот самый слот, не будет взаимодействовать со стержнями. Я не знаю как работает механика стержней, конденсаторов, теплоотводов и т.д, но в моей схеме для такого нужно будет убрать два стержня в углу каком то, если я правильно понял. В твоей схеме тоже вроде нужно два стержня убрать, чтобы оставить слот для конденсатора, который не будет ломаться.

    Скрытый текст

    image.pngimage.png


  15. 13 минуты назад, prop сказал:

    Т.е. две отдельные системы из контроллера и транспозера, которые мониторят каждая свою половину.

    В этом нет никакого смысла, исходя из информации, предоставленной @eu_tomat, если во время замены конденсаторов, происходит реакторный тик, то нагрев все равно произойдет


  16. 11 минуту назад, prop сказал:

    Есть ли смысл поменять пороговое при котором происходит замена конденсаторов, почему именно 1000? 

    Конденсаторы ломаются от 0 до 10000, где 10000 это уже сломанный конденсатор и он пропадает. 1000 указана для теста, чтобы долго не ждать.

    12 минуты назад, prop сказал:

    Использовать второй транспозер, который будет менять конденсаторы с конца

    Я так понимаю, ты неосознанно намекаешь на многопоточность, но к сожалению нормальной многопоточности, в прямом понимании этого термина в OC вроде как нет.


  17. 41 минуту назад, prop сказал:

    Можно взять и написать свой мод, который решает эту проблему.

    На форуме посвященному OpenComputers, я спрашиваю как менять конденсаторы, без остановки реактора. Ты предлагаешь все что угодно, кроме идей для решения моего вопроса


  18. 2 минуты назад, serafim сказал:

    теоритически можно менять конденсаторы без нагрева реактора в определённый момент времени

    Да, я понимаю риски, но способ узнать все равно хочется. Теоретически. Значит на практике никто не проверял? И как узнать этот определенный момент?


  19. 3 минуты назад, prop сказал:

    Если потребляемая энергия не равна производимой, то downtime в пару секунд не должен положит систему, нужны подробности.

    Нет никаких проблем с тем, чтобы остановить реактор. Просто менять конденсаторы не останавливая реактор, конечно же эффективнее.


  20. 1 час назад, eu_tomat сказал:

    Что для тебя является значительным в контексте этой темы?

    Собственно любая информация о возможности менять конденсаторы без остановки, будет значимой. Про транспозер я понял. Значит его оставляю)
    Если возможность менять конденсаторы есть, это уже радует. Но не совсем понятно, что значит "универсальный рецепт отсутствует"?
    Вот пример самой простой программы для замены конденсаторов:
     

    Скрытый текст
    
    local sides = require("sides")
    local tr = require("component").transposer
    local middleColumn = {5,14,23,32,41,50}
    local leftColumn = {2,11,20,29,38,47}
    local rightColumn = {8,17,26,35,44,53}
    
    function replaceCondensers()
        local slot = 1
        for _, v in pairs(middleColumn) do
            tr.transferItem(sides.up,sides.south,1,v,slot)
            tr.transferItem(sides.west,sides.up,1,slot,v)
            slot = slot + 1
        end
        for _, v in pairs(leftColumn) do
            tr.transferItem(sides.up,sides.south,1,v,slot)
            tr.transferItem(sides.west,sides.up,1,slot,v)
            slot = slot + 1
        end
        for _, v in pairs(rightColumn) do
            tr.transferItem(sides.up,sides.south,1,v,slot)
            tr.transferItem(sides.west,sides.up,1,slot,v)
            slot = slot + 1
        end
    end
    
    function run()
        while true do
            if tr.getStackInSlot(sides.up,23).damage > 1000 then
                replaceCondensers()
            end
        end
    end
    
    run()

     

    Самый простейший алгоритм: достать и вставить. Но все равно не достаточно быстро:( Схема на обычных урановых стержнях с тремя столбиками конденсаторов. 


  21. Решил я тут попробовать написать программу для авто замены лазуритовых конденсаторов в реакторе. Выходит пока что не очень. Пока конденсаторы меняются, реактор успевает нагреться на 600 единиц. Я пролистал тему про "Очень много электричества" тут на форуме и не нашел ничего значительного. Я пробовал просто с транспозером в один сундук выкладывать конденсаторы, а из второго брать. Собственно вопрос: есть ли возможность менять их, не выключая реактор? Может какие то методы быстрее других? Может методы транспозера медленнее работает, чем например методы сундука для трансфера вещей или еще какие то тонкости есть? Или это вовсе невозможно?


  22. 1)У сундука и ME сети из Applied Energistics 2, разные метод и разные структуры возвращаемых таблиц, что касается данных о предмете в слоте. То есть, если я хочу узнать что лежит в 1 слоте в сундуке, я получу таблицу с одной структурой и если я хочу узнать что лежит в первом слоте в me сети, я получу таблицу с другой структурой. Собственно вопрос: есть какие то оптимальные подходы, чтобы сравнить эти две таблицы и понять, одинаковые ли предметы находятся в сундуке и в me сети? Есть конечно старый добрый брутфорс по выбранным захардкоженым полям, но чета это не то. Общая задача: в сундуке в первом слоте лежит пчела, мне нужно найти таких же пчел в me сети и переместить их в сундук. При этим, у пчел есть показатель поколений в неволе, который мне нужно игнорировать.

     

    2)Еще побочный вопрос. Может где то можно достать все структуры всех таблиц для разных api из opencomputers? Потому что я могу только сидеть и принтом смотреть какая структура у таблицы, которую возвращает какой то метод, что не очень удобно.   

×
×
  • Создать...