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

Teen_Romance

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

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

  • Посещение

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


  1. А вот второй метод request возвращает объект у которого есть метод isDone который говорит готов ли предмет и в моем случае он говорит, что не готово и причину(нет ресурсов), но каких именно, не говорит


  2. Доброго времени суток. У AE2 есть метод/ы для для крафта вещей, типrequestCrafting()Засим вопрос, есть ли какой то метод/ способ,  как можно достать/узнать рецепт крафта? То-есть когда руками запрашиваешь крафт через ae2, в терминале тебе показывает какие ресы нужны и их кол-во. Вот эту инфу как то программно достать можно или нужно ручками все писать? Спасибо

     

    UPD

    Вот нашел метод getCraftables(), но он возвращает только список предметов которые можно сделать, без информации какие предметы требуются для создания и их колличество


  3. @Asior Я загружаю таблицу 1 раз за 1 цикл программы и работаю с ней. Насколько я понял, ваш метод подходит если мне нужно несколько разных таблиц в 1 программе? Или в моем случае это тоже будет выгодно? Если не сложно, можно какой то простенький пример вашего метода? 


  4. 1 час назад, Fingercomp сказал:

    local tbl = srl.unserialize(f:read("*a"))

    Что такое "*a" и как оно рассчитывается? И подскажите пожалуйста, как мне из 20 таблиц определить нужную мне? Я писал выше, что насколько я понял, мне нужно знать промежуток байтов в которых записана таблица? Или как?


  5. @Fingercomp 

    Скрытый текст
    
    local solar = {craft ={id = "IC2:blockGenerator",dmg = 3},{id = "minecraft:cobblestone",dmg = 0,qty = 11},
    				{id="IC2:itemIngot",dmg = 1,qty = 3},
    				{id="minecraft:coal",dmg = 0,qty = 3},
    				{id="minecraft:redstone",dmg = 0,qty = 6},
    				{id="IC2:itemRubber",dmg = 0,qty = 13},
    				{id="IC2:itemIngot",dmg = 0,qty = 4},
    				{id="minecraft:iron_ingot",dmg = 0,qty = 10}}

    В таблице может быть больше или меньше таблиц, в зависимости от создаваемого предмета. 

    У меня вроде получилось записать таблицу в файл:

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

    V2VYWlnhdN7QVm.png

    Но теперь не знаю как сделать ее обратно таблицей при считывании из файла.

    +

    Сразу возникла проблема. У меня в файле будет допустим 20+ таблиц. И когда я захочу обратится к конкретной, нужной мне таблице, как это сделать? В file:write() нужно указывать количество байт для считывания. Как мне узнать в каком промежутке байт находится нужная мне таблица?

     


  6. Мне нужно, чтобы моя программа записывала результат своей работы(таблицу) в отдельный файл. И уже основная программа брала нужную таблицу из этого файла и работала с ней. Как это лучше реализовать? file:write() принимает только string, к тому же он, насколько я понял, переписывает файл всегда заново.


  7. table_1 = { length = 88 }
    
    table_2 = table_1
    
    table_2[length] = 99
    
    print( table_2["length"] )  -- выводится значение 99
    
    print( table_1["length"] )  -- выводится значение 99
    Цитата

    Такой результат получен потому, что table_1 и table_2 ссылаются на одну и ту же таблицу.

    Можно ли избежать это как-то? Или нужно каждый раз заново инициализировать изначальную таблицу?


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

    Ну как где? "pe4[stack.id]" - тут и сравнивает. Если таблица pe4 содержит элемент с ключом, эквивалентным значению поля id таблицы stack, то результатом будет значение элемента таблицы pe4 по требуемому ключу.

    Минуты 2 сидел вчитывался и не мог понять фишку, а потом каааак понял 🤣 На самом деле гениально, просто звучит сложно. Если элемента по такому ключу в таблице не будет то выражение просто будет равно nil )

    Сложно как то еще применить но я подумаю)

    Спасибо большое еще раз :)


  9. 6 минут назад, ECS сказал:

    А конструкция "if stack and pe4[stack.id]" работает именно так, как ты и предположил - сначала проверяет наличие предмета в слоте,  а затем уже сверяет id с твоей таблицей

    А где она сравнивает id с таблицей? "if stack and pe4[stack.id]" Разве для того чтобы ветвь if выполнилась выражения должны быть равны между собой?  Разве не просто проверяется их пустота? Тип если stack не пустой и pe4[stack.id] не пуста тогда что то делается. Правая часть условия всегда будет истинна, но где они сравниваются? И вы имеет ввиду вообще без цикла или только с 1 фором? По ячейкам сундука ведь мне все равно нужно проходить.


  10. 8 минут назад, eu_tomat сказал:

    Кстати, выше @ECS предложил более удобный вариант поиска элемента по id в качестве ключа, что избавляет от цикла:

    Я не понимаю в чем фишка этого варианта. Грубо говоря stack это таблица с кучей инфы от проверки жидкость ли это до dmg. А что у меня получится если я напишу pe4[stack.id] - я не понимаю. Типо ключем таблицы будет допустим "minecraft:cobblestone" и что дальше? И что вообще делает if stack and pe4[stack.id] then. Если в таблице stack(то есть в ячейке сундука) что то есть, и в таблице с ключем stack.id(имеется в виду что ключем будет тоже "miecraft:cobblestone" как я понял) что то есть, тогда что то там. Вообщем как то сложновато (


  11. 3 часа назад, ECS сказал:

    Конкретно в твоем случае ошибка происходит по той причине, что getStackInSlot возвращает nil, а ты пытаешься получить поле от возвращаемых данных по ключу id - вот и получаешь ошибку attempt to index a nil value. Слот пустой, id не существует. Делай проверку разово - и работай с переменной stack.

    Проснулся и после прочтения всего что вы тут писали понял: ошибка из за того что первым фором (for i=1,10) я прохожу по таблице с рецептом (таблица pe4 ) в которой всего 2 ключа(или 2 таблицы внутри, не знаю как правильно сказать). А вторым фором(for j=1,10) я прохожу по ячейкам кристального сундука, для сравнения рецепта (pe4) и наличия ресурсов в сундуке. А из за того что первый for 10 раз идет по таблице в которой всего 2 элемента я  получал ошибку(Так глупо что аж ...:( ). 

    3 часа назад, ECS сказал:

    Также я не совсем понимаю, почему ты используешь два цикла for i = 1, 10 / for j = 1, 10, когда число предметов в ME-сети явно может превышать 100. Наверняка там должен иметься метод getInventorySize, или getItemCount, или еще какой-то схожий - используй его.

    Я просто давно не работал с OC и сейчас маленькими кусочками вспоминаю что и как работает. На скринах это просто куски программы ничего по сути пока что не делающей. 

    2 цикла for я использую чтобы первый проходил по таблице с рецептом, а второй по ячейкам сундука(Ведь нужные ресурсы могут быть не только в первых 2,3,4,10 слотах). 10 я в цикле указал просто так, для теста, я понимаю что в сундуке около 100 ячеек. Не знаю насколько это рационально использовать 2 фора, но как я говорил выше, я просто пробую что и как работает)

    3 часа назад, ECS сказал:

    И еще: для сравнения id предметов с таблицей pe4 также придется делать отдельную логику. Что-то наподобие:

    Возможно с этим у меня в будущем возникнут проблемы, но я пока что просто проверяю что и как работает. Попробую пока что использовать для проверки ресурсов в сундуке и сравнения с рецептом, то что у меня на скринах. А вообще я хочу написать программу для автокарфата вещей на варпе. Типо  на компе выбираешь дробитель из IC2, тебе показывает какие и  сколько ресурсов нужно, ты кладешь их в сундук и для тебя делается дробитель. Хочется еще сделать граф оформление(чтобы по экрану можно было клацать) поэтому у меня в скором времени появятся вопросы с event и GUI :) А то на вики чет вообще ничего не понятно.

    Спасибо всем кто помогал :) 


  12. @eu_tomat Возможно я не так понял, но я сделал вот так:

    image.png.634409ff92088d7f125e5dc829817ed9.png

    И теперь ошибка в том что не может дать индекс полю если пустой слот и не выполняет вообще ничего:

    image.png.b157cfd78c0f934f7b6a46085b3b7b6e.png

    ну и собственно если поменять y=cry.getStackInSlot(j).id то получаю ту же  ошибку


  13. Киньте ссылок где можно почитать про графику в OC. Типо всякие drawBox и так далее. И про ивенты.  А то я честно не знаю даже как загуглить. По ивентам нашел вот это, но хотелось бы как то более в развернутом виде почитать.

    Спасибо заранее.

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