Hikooshi
-
Публикации
25 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные пользователем Hikooshi
-
-
43 минуты назад, BrightYC сказал:По сути, если поиск кнопки долгий - то тут уже ничего не поможет. Разве что, если в коде кнопки есть какой-нибудь os.sleep, то листенер поможет.
P.S Сколько кнопок нужно иметь, чтобы кнопка долго искалась?
нет, кнопки-то быстро ищутся, их десять или около того, имеется в виду, что на одной из кнопок есть функция с вайлом и вот пока этот вайл выполняется, на кнопке который, нужно другие кнопки нажимать
-
Никогда с таким не сталкивался и вдруг...
Например, есть основной цикл, в котором обрабатывается поиск кнопки
while true do local _,_,x,y = event.pull("touch") if ... then ... end endДалее вызывается функция со своим вайлом, который выполняется довольно долго
Как мне сделать так, чтоб во время этого вайла можно было и другие кнопки нажимать? Листенера прикреплять?
И сразу второй вопрос: если функции локальны и такая локальная функция прикреплена к листенеру, то как потом отключить такого листенера, если закрывать программу через Ctrl+Alt+C или если программа вылетает?
-
-
-
-
Только что, Alex сказал:ага, ну ок. То есть всё работает там сейчас у тебя так как положено? Все реквестится и скачивается без проблем?
да, но если слипнуть без while'а, то тоже будет работать
-
Только что, 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 и цикл завершится -
Только что, Alex сказал:@Hikooshi какая у тебя версия оски?
и что это за куча кавычек с нилами? что они значат? Это у тебя так файлы скачиваются? или что это?
версия 1.74, в которой еще транспозеры правильно работают)
кавычки с нилами - то, что программа принтит (обрати внимание на то, где стоит print(data, reason)), пока цикл работает. То есть в течение полусекунды запрос при неправильном айдишнике возвращает пустую строку, как и при правильном айдишнике, через полсекунды возвращает nil и адрес. То есть полсекунды data == "", reason == nil, по прошествии полусекунды data == nil, reason == адрес, выходит из цикла. При правильном айдишнике принтило бы содержимое переменной data, то есть код, полученный с пастбина
-
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
"" nilnil адрес
то есть, все-таки задержка есть, просто здесь ее программа сама как бы создает, в моем же случае я ее прописываю -
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, хотя, возможно, зависит от сайта
-
3 часа назад, Alex сказал:а что ты делаешь? браузер какой-то? Напиши лучше пример конкретно, где и с чем ты столкнулся с какой-то проблемой. Так будет понятнее другим форумчанам, как решить твою проблемку.
п.с. Да и фильтра, скорее всего, не существует никакого в природе. Просто проверяй, что ты там в респонсе получил. Получил nil или пустую строку "", так и пиши, что, мол, страница не найдена, или типа того. Вот и всё.
можно было бы и так сделать, но в любом случае и в правильном и в неправильном, через .read() возвращается "", если б было как в консоли, то есть при неверной ссылке возвращался бы nil, то фильтровать очень просто можно было бы
в общем, есть таблица [название файла] = "его айди". Айдишник считывается из определенного места файла и если на том месте не айдишник, а что-то другое, то цикл for chunk in response do ... end выдаст ошибку и программа завершится. Вот я и ищу способ сделать фильтр
-
еще вопрос
если в консоли написать
result, response = pcall(internet.request, "https://pastebin.com/raw/".. a), где a - намеренно неверная ссылка
d, r =response.read()
то консоль вернет значения
d == nil r == адрес
НО, если то же самое сделать через программу, то вернет
d == "" r == nil
в чем проблема здесь?
хотя меня больше интересует вопрос, как люди делают фильтр неправильных ссылок, ведь result в этих случаях будет true
-
все понятно, и да, через .read() информация читалась, но очень такой способ неудобный. Всем спасибо
-
ошибку нашел, нужно было писать 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
-
1 час назад, BrightYC сказал:Это уже на стороне тебя проблемы, у меня все принтится...
Утром возможно знатоки придут, возможно что-то скажут
хмм, это очень интересно
-
Только что, 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
>
пустая строка дальше выдается
-
Только что, BrightYC сказал:Немного не понял, о чём ты, ты хочешь встроить скачивание с пастебина к себе куда-то? internet.request же работает
хочу через интерпретатор проверить, как оно работает, но цикл почему-то не возвращает ничего (цикл с чанками), хотя через .read() можно текст вернуть. Вот и спрашиваю, что не так, если в программе этот цикл работает, а в консоли (интерпретаторе) - нет
-
подскажите, в чем дело
есть программа pastebin, чтоб с пастбина качать, пробую код функции get() в консоли писать - запрос, вроде, происходит, но чанки не возвращаются и файл ничего не записываетсяесли точнее, то вот эта часть кода
for chunk in response do
-- if not options.k then
string.gsub(chunk, "\r\n", "\n")
-- end
f:write(chunk)
endhttp-запросы открыты и через саму программу скачать файл получается
ах да, через response.read() получается прочитать текст кода, то есть response.read(4) возращает первые четыре символа кода
-
1
-
-
-
В 1.12 нет метаданных толком. См. issue. Пока не починено.
Значит, сейчас нужно искать замену этого дела, вот же ж, спасибо и на том
-
Всем здрасьте
Суть вопроса:
раньше, например, на версии 1.7.10 майна geolyzer мог возвращать функцией analyze() в таблице значение metadata
на версии 1.12.2 этого не происходит.
В таком случае
это у меня конфиг так прописан, что не происходит возвращения этой переменной? хотя в конфиге такой настройки не находил
это мод теперь так работает, что не возвращает metadata блока?
другой вариант?
Кто сталкивался - отзовитесь, значение этой переменной нужно, например, для работы с Forestry, потому, как блоки Forestry именуются, к примеру name="forestry:resources". Раньше по metadata можно было точно узнать, что за блок, сейчас, соответственно, нет. Раньше - версия 1.7.10, теперь - версия 1.12.2
-
Видео-гайды по 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 серия:
-
8
-
1
-
-
Два варианта:
Первый. Через аргументы командной строки.
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 снимал?
Вот как раз второй вариант и пытался сделать, спасибо. А на счет гайдов - стыдно признавать, но да. Пришла популярность... Вообще мой канал не популярный и изначально задумывалось показать это только паре-тройке друзей, что на моем сервере играют
-
Подскажите, пожалуйста, синтаксис программы, чтобы можно было устанавливать значение каждого вокселя отдельно в текстовом виде. То есть не через интерпретатор каждый раз писать component.hologram.set(x, y, z, value), а чтобы просто было поле ввода текста, в котором как раз эти x, y, z, value и нужно было бы писать. Через pcall(io.read) не получалось, программа ругалась, что первый аргумент булевый, даже если остальные, кроме этого первого задать изначально. P.S. я не так давно начал изучать Lua

Ивенты
в API
Опубликовано:
всем спасибо