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

Hikooshi

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

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

  • Посещение

  • Победитель дней

    2

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


  1. 43 минуты назад, BrightYC сказал:

    По сути, если поиск кнопки долгий - то тут уже ничего не поможет. Разве что, если в коде кнопки есть какой-нибудь os.sleep, то листенер поможет.

     

    P.S Сколько кнопок нужно иметь, чтобы кнопка долго искалась? 

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


  2. Никогда с таким не сталкивался и вдруг...
    Например, есть основной цикл, в котором обрабатывается поиск кнопки
     

    while true do
    local _,_,x,y = event.pull("touch")
    if ... then
    ...
    end
    end

    Далее вызывается функция со своим вайлом, который выполняется довольно долго

    Как мне сделать так, чтоб во время этого вайла можно было и другие кнопки нажимать? Листенера прикреплять?

     

    И сразу второй вопрос: если функции локальны и такая локальная функция прикреплена к листенеру, то как потом отключить такого листенера, если закрывать программу через Ctrl+Alt+C или если программа вылетает?


  3. Только что, BrightYC сказал:

    Её нет на 1.12 насколько я помню :(

    openModsLib надо попробовать и если с ней в комплекте что-то еще идет, вроде то же самое


  4. На версии майна 1.7.10 была возможность экспортить, пушить, пулить предметы через me_interface; на 1.12.2 - нет. Кто-нибудь с этой проблемой разбирался и если да, то как ее решали, не применяя базы данных? может в конфиге что подкрутить надо? Версия OC 1.74.153


  5. Только что, Alex сказал:

    @Hikooshi а, то есть это не правильный адрес. ок.

    а попробуй 1.72 оску. Там есть такая херабора со слипами? Я первый раз слышу, чтобы нужно было заслипить прогу после реквеста, чтобы хоть что-то получить в запросе. Такого же не должно быть.

     

    пс. И в смысле в 1.74 транспозеры ЕЩЕ правильно работают? Их же вроде наоборот поломали в 1.73 или в 1.74, или исправили в 1.74. На 1.72 вроде они работали четенько. Там были в 1.72 какие-то микробагульки но всё в этой версии работало в основном, а армагедон начался вроде с 1.73. То аешка там отлетела, то транспозеры, а теперь еще и с реквестом оказывается какие-то чудеса несусветные происходят. Роботы пропадают и выключаются, и прочие неописуемые беды там наблюдаются в 1.74 по рассказам очевидцев.

     

    Откатись на 1.72 и попробуй там файлики свои поскачивать.

    ты неправильно поставил ударение на слово "еще", имелось в виду, типа "та самая версия в которой еще транспозеры работают", они поломаны были на 1.73.
    После реквеста ничего можно не слипать, применяя функцию, скинутую тобой, оно само по себе слипается, потому что там цикл while и он будет выполняться до тех пор, пока в data не будет nil. В случае неправильного айдишника request.read() несколько раз будет data == "", и через полсекунды - data == nil. В случае правильного айдишника так же сначала в течение полусекунды data будет "", потом будет равна полученным данным, потом, когда файл закончится data станет nil и цикл завершится


  6. Только что, Alex сказал:

    @Hikooshi какая у тебя версия оски?

    и что это за куча кавычек с нилами? что они значат? Это у тебя так файлы скачиваются? или что это?

    версия 1.74, в которой еще транспозеры правильно работают)

    кавычки с нилами - то, что программа принтит (обрати внимание на то, где стоит print(data, reason)), пока цикл работает. То есть в течение полусекунды запрос при неправильном айдишнике возвращает пустую строку, как и при правильном айдишнике, через полсекунды возвращает nil и адрес. То есть полсекунды data == "", reason == nil, по прошествии полусекунды data == nil, reason == адрес, выходит из цикла. При правильном айдишнике принтило бы содержимое переменной data, то есть код, полученный с пастбина


  7. function get(url)
      local request, reason = internet.request(url)
      if not request then return '' end
     
      local text = ''
      while true do
        local data, reason = request.read()
    
    print(data, reason)
    
        if not data then
          request.close()
          break
        elseif #data > 0 then
          text = text..data
        end
      end
      return text
    end

    эту функцию где-то находил через нее тоже не получалось сделать как надо, но там у меня в другом месте где-то был косяк. Щас поправил твой вариант, если точнее, то добавил print(data, reason) и понял в чем дело теперь:
    примерно в течение полусекунды происходит следующее - программа пишет:

    ""      nil

    ""      nil

    ""      nil

    ""      nil
    ""      nil
    ""      nil
    ""      nil

    nil      адрес

    то есть, все-таки задержка есть, просто здесь ее программа сама как бы создает, в моем же случае я ее прописываю


  8. 11 час назад, Alex сказал:

    @Hikooshi честно говоря ничего не понял) В каком смысле  но в любом случае и в правильном и в неправильном, через .read() возвращается ""?

    Что за консоль. Что программа твоя делает?

     

    обновляет файлы с пастбина

    айди файла находится в самом файле в определенном месте, но если в том месте будет любое другое слово, то программа вылетит с ошибкой.

    Сначала в программе открывается список файлов, считываются из того определенного места значения айдишников, получается таблица [название файла] = "айди". Потом в цикле из этой таблицы берутся айдишники и происходят реквесты internet.request("https://pastebin.com/raw/"..айди). Вот тут самое интересное и начинается: если айдишник это именно айдишник, то все нормально работает, чанки возвращают данные и файл перезаписывается, но если вместо айдишника будет просто слово, например "component" или какой другое, то цикл с чанками выдаст ошибку и, как написано выше, программа просто вылетит. Поэтому хотел сделать фильтр, чтоб при неправильном айдишнике просто код переходил к следующему из таблицы.

    Если в консоли сделать так:

    > response = internet.request("https://pastebin.com/raw/правильный айди")

    > =response.read()

    то консоль вернет

    > ""

    то же самое происходит и в программе, то есть можно было бы сделать так data, result = response.read(); if data then for chunk in response do ... end end

    Если же в консоли написать так:

    > response = internet.request("https://pastebin.com/raw/НЕправильный айди")

    > =response.read()

    то консоль вернет

    > nil         адрес

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

     

    проблема решена: между internet.request и response.read() добавил os.sleep(1), минимум времени может быть 0.3, хотя, возможно, зависит от сайта


  9. 3 часа назад, Alex сказал:

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

     

    п.с. Да и фильтра, скорее всего, не существует никакого в природе. Просто проверяй, что ты там в респонсе получил. Получил nil или пустую строку "", так и пиши, что, мол, страница не найдена, или типа того. Вот и всё.

    можно было бы и так сделать, но в любом случае и в правильном и в неправильном, через .read() возвращается "", если б было как в консоли, то есть при неверной ссылке возвращался бы nil, то фильтровать очень просто можно было бы

    в общем, есть таблица [название файла] = "его айди". Айдишник считывается из определенного места файла и если на том месте не айдишник, а что-то другое, то цикл for chunk in response do ... end выдаст ошибку и программа завершится. Вот я и ищу способ сделать фильтр


  10. еще вопрос

    если в консоли написать

    result, response = pcall(internet.request, "https://pastebin.com/raw/".. a), где a - намеренно неверная ссылка

    d, r =response.read()

    то консоль вернет значения

    d == nil      r == адрес

    НО, если то же самое сделать через программу, то вернет

    d == ""       r == nil

    в чем проблема здесь?

    хотя меня больше интересует вопрос, как люди делают фильтр неправильных ссылок, ведь result в этих случаях будет true


  11. ошибку нашел, нужно было писать internet.request(), а я вводил component.internet.request(). Теперь объясните, почему через вызов компонента не работает?

    result, response = pcall(internet.request, " адрес ") for chunk in response do print(chunk) end

    for chunk in internet.request(" адрес ") do print(chunk) end

    оба кода в консоли работают одинаково, почему так? В смысле, почему не нужно в данном случае указывать component?

    версия OC 1.74


  12. Только что, BrightYC сказал:

    Да вроде всё работает, и цикла я там не увидел. Попробуй в интерпретаторе запустить этот код:
    result, response = pcall(internet.request, "http://example.org/") if result then for chunk in response do print(chunk) end end

    именно так я и делал, принт просто ничего не возращал, то есть:

    > result, response = pcall(internet.request, "http://example.org/") if result then for chunk in response do print(chunk) end end

    >

    пустая строка дальше выдается


  13. Только что, BrightYC сказал:

    Немного не понял, о чём ты, ты хочешь встроить скачивание с пастебина к себе куда-то? internet.request же работает

    хочу через интерпретатор проверить, как оно работает, но цикл почему-то не возвращает ничего (цикл с чанками), хотя через .read() можно текст вернуть. Вот и спрашиваю, что не так, если в программе этот цикл работает, а в консоли (интерпретаторе) - нет


  14. подскажите, в чем дело
    есть программа pastebin, чтоб с пастбина качать, пробую код функции get() в консоли писать - запрос, вроде, происходит, но чанки не возвращаются и файл ничего не записывается

    если точнее, то вот эта часть кода

    for chunk in response do
     --     if not options.k then
            string.gsub(chunk, "\r\n", "\n")
     --     end
          f:write(chunk)
        end

    http-запросы открыты и через саму программу скачать файл получается

    ах да, через response.read() получается прочитать текст кода, то есть response.read(4) возращает первые четыре символа кода

    • В шоке 1

  15. Всем здрасьте

    Суть вопроса:

    раньше, например, на версии 1.7.10 майна geolyzer мог возвращать функцией analyze() в таблице значение metadata

    на версии 1.12.2 этого не происходит.

     

    В таком случае

    это у меня конфиг так прописан, что не происходит возвращения этой переменной? хотя в конфиге такой настройки не находил

    это мод теперь так работает, что не возвращает metadata блока?

    другой вариант?

     

    Кто сталкивался - отзовитесь, значение этой переменной нужно, например, для работы с Forestry, потому, как блоки Forestry именуются, к примеру name="forestry:resources". Раньше по metadata можно было точно узнать, что за блок, сейчас, соответственно, нет. Раньше - версия 1.7.10, теперь - версия 1.12.2


  16. Видео-гайды по OpenComputers.

     

    Сделаны для тех, кто начинает разбираться с этим модом или возникают какие-то вопросы.

     

    Знатоки, особо не ругайтесь)

     

    Начиная с 7 серии разрешение 1080p

     

    1 Серия. Железо

     

    2 Серия. Файловая система

     

    3 Серия. Роботы

     

    4 Серия. Апгрейды роботов

     

    5 Серия. Голопроекторы

     

    6 Серия. Редстоун

     

    7 Серия. Функции роботов + апгрейдов V2.0

     

    8 Серия. Микроконтроллер + Планшет + Дроны. Программирование EEPROM

     

    9 Серия. Сетевые устройства

     

    10 Серия. Нанороботы + путевые точки

     

    11 Серия. Карты, принтер, database

    http://www.youtube.com/watch?v=_YYoiFvH4Cc

     

    12 серия. Мониторы, видеокарты, эвенты мониторов

    http://www.youtube.com/watch?v=_DDHR9aEPIs

     

    Следующие гайды по моду Computronics. Это не совсем OpenComputers, но многим будут полезны

     

    1 серия:

    https://www.youtube.com/watch?v=KriJuN-02s8

     

    2 серия:

    https://www.youtube.com/watch?v=NahPoaGpqhg

     

    Стыковочная станция и интерфейс для дрона:

    https://www.youtube.com/watch?v=0zmFN7VcGYA

     

    3 серия:

    https://www.youtube.com/watch?v=KNjPwZt7kQM

    • Нравится 8
    • Спасибо 1

  17. Два варианта:

    Первый. Через аргументы командной строки.

    local com = require('component')
    local holo = com.hologram
    local args = {...}
    
    local x = tonumber(args[1])
    local y = tonumber(args[2])
    local z = tonumber(args[3])
    local val = tonumber(args[4])
    
    holo.set(x,y,z,val)
    

    Назови программу как-нибудь (test) сохрани, и потом вызывай вот так:

    test 24 1 24 3
    

    Вариант второй. Через ввод с клавиатуры в цикле.

    local com = require('component')
    local holo = com.hologram
    
    -- эта функция рубит переданную строку по пробелам
    function split(str)
      words = {}
      for w in str:gmatch("%S+") do table.insert(words,w) end
      return words
    end
    
    while true do
      io.write("> ")
      words = split(io.read())
      x = tonumber(words[1])
      y = tonumber(words[2])
      z = tonumber(words[3])
      val = tonumber(words[4])
      holo.set(x,y,z,val)
    end
    

    Тут еще проще. Просто запускаешь и появляется приглашение. Вводишь туда числа:

    > 24 32 24 1█
    

    Выход - по Ctrl+C или неправильному вводу =)

     

    P.S. Ты не тот ли Hikooshi случайно, который гайды по OpenComputers снимал?

    Вот как раз второй вариант и пытался сделать, спасибо. А на счет гайдов - стыдно признавать, но да. Пришла популярность... Вообще мой канал не популярный и изначально задумывалось показать это только паре-тройке друзей, что на моем сервере играют


  18. Подскажите, пожалуйста, синтаксис программы, чтобы можно было устанавливать значение каждого вокселя отдельно в текстовом виде. То есть не через интерпретатор каждый раз писать component.hologram.set(x, y, z, value), а чтобы просто было поле ввода текста, в котором как раз эти x, y, z, value и нужно было бы писать. Через pcall(io.read) не получалось, программа ругалась, что первый аргумент булевый, даже если остальные, кроме этого первого задать изначально. P.S. я не так давно начал изучать Lua

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