eu_tomat
Модераторы-
Публикации
2 666 -
Зарегистрирован
-
Посещение
-
Победитель дней
331
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя eu_tomat
-
Проверил у себя на компьютере, gsub в моём примере выполнился за 2.5 сек. А стандартный таймаут для TLWY составляет 5 сек. Запас по времени маловат, поэтому решение неустойчивое, на слабом железе работать не будет. Предлагаю в вызываемую функцию добавить os.sleep(0).
-
Лучше тогда разбирать web-версию гитхаба. Решение, конечно, медленное, но зато не требует обновлять код установщика при изменениях файловой структуры. Можно даже комбинировать вызовы к API и Web в зависимости от исчерпания лимита.
-
@AlexCatze Я столкнулся с неприятным свойством API GitHub: https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting Простым языком: для анонимных пользователей доступно не более 60 запросов в час с одного IP-адреса. Из-за этого решение на базе API может оказаться нестабильным. Особенно, учитывая, что на одном IP может работать несколько серверов, и на каждом сервере может играть больше одного игрока.
-
Ну, точно! Есть API:
-
Я забыл сразу упомянуть один важный момент. Надо как-то отличать каталоги от файлов. Интуитивно понятное решение: искать в тексте ссылку на raw-формат файла. Но оно потребует дублирования запроса и ожидания отдачи страницы. Есть более быстрое решение: сразу запрашивать сырой формат. Если получишь 404, значит это не файл, а каталог. Это решение потребует меньше трафика и времени на ожидание. Скорее всего, гитхаб имеет API, позволяющий избежать и лишнего трафика и этих трюков с парсингом. Моё решение следует рассматривать как отправную точку, интуитивно понятную, но вряд ли оптимальную.
-
Вот пример скрипта, считывающую ссылки на элементы каталога: local url = "https://github.com/AlexCatze/racoon-dev/" local internet = require("internet") local html = "" local result, response = pcall(internet.request, url) if result then local result = pcall(function() for chunk in response do html = html .. chunk end end) end if result then html:gsub( 'data%-pjax="#repo%-content%-pjax%-container" href="(.-)">', function(s)print(s)end ) end Результатом его выполнения вывод будет следующий вывод: /AlexCatze/racoon-dev/tree/master/bin /AlexCatze/racoon-dev/tree/master/boot /AlexCatze/racoon-dev/tree/master/etc /AlexCatze/racoon-dev/tree/master/lib /AlexCatze/racoon-dev/tree/master/www Далее потребуется рекурсивно обойти все каталоги и найти в них файлы.
-
@AlexCatze Есть два предложения: Немного упростить гайд, чтобы не заставлять пользователя возвращаться туда-сюда: Пишем проще: заливаем на гитхаб..., копируем адрес..., создаём файл..., вставляем адрес... Дописать установщику возможность динамически считывать структуру репозитория, например, из каталога https://github.com/AlexCatze/racoon-dev/installer Страницы разбираются не сложно, по фразе data-pjax="#repo-content-pjax-container". Это позволит пользователю не повторять процедуру при смене структуры каталогов или добавлении и удалении файлов.
-
Да, действительно. Сразу я не смотрел скриншоты, а ориентировался по описанию: Из этой формулировки не ясно, как именно не помогло, и что ошибка генерируется именно при выполнении component.isAvailable. Я сейчас сравнил работу component.isAvailable в 1.6.2.12 и 1.7.5.1290. Отличий не вижу. При этом в 1.7.5.1290 подобная проблема у меня ни разу не возникала. Проблема вряд ли в библиотеке component. Ошибка возникает только на сервере или и в одиночной игре тоже? И что это за сборка?
-
Именно component.isAvailable() вызывает ошибку? Если так, то на какой версии Minecraft и OpenComputers?
-
Почему подозрение пало на библиотеку component? component.isAvailable позволяет определить наличие компонента определённого типа, но не гарантирует, что найден именно тот компонент, что когда-то был сохранён в переменной программы.
-
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
Да, в современных версиях ComputerCraft компьютер включается сам при загрузке чанка, в котором находится компьютер. В OpenComputers выполнение программы приостанавливается при выгрузке чанка, а при загрузке продолжается ровно с того же места, где оно было приостановлено. В ComputerCraft при выгрузке чанка выполнение программы обрывается, а при загрузке чанка компьютер включается и выполняет стартовый скрипт. -
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
Ага. Весь секрет в формулировках. Первая: Это формулировка требует обнаруживать факт перезапуска мира. Эта задача не всегда имеет решение. Последняя: Эта формулировка требует всего лишь настроить автозапуск программы при загрузке компьютера. Вот она, сила формулировок: Компьютеры ComputerCraft перезагружаются не столько при перезапуске мира, сколько при перезапуске чанка. Отслеживать загрузку мира в этом случае не требуется. Задача упрощается. Компьютеры перезагружаются не только при перезапуске чанка, но и механиками самого мода. Отслеживать перезагрузку чанка не требуется. Задача упрощается ещё сильнее. Компьютер загружается не только при его перезагрузке, но и просто при включении. Отслеживать факт перезагрузки компьютера также не обязательно. А это уже совсем простая задача! -
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
Эта идея сгодится для того, чтобы программа запустилась в момент включения компьютера. Но тогда появится новый вопрос: как включить компьютер в момент загрузки мира? И, опять же, компьютер в незагруженном чанке в любом случае не включится, даже если загружен мир. -
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
В этих условиях задача вряд ли имеет решение. Компьютер не отличает перезагрузку мира от перезагрузки чанка, в котором находится этот компьютер. Да и перезагрузку чанка можно однозначно идентифицировать не на всех серверах. -
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
А чанк с компьютером всегда загружен? -
Как автоматически запустить программу при перезапуске мира?
eu_tomat ответил в вопрос Grobovshik5121 в Общие
Что значит "перезапуск мира"? -
component.drone.move(...) возвращает управление в программу, не дожидаясь завершения движения. Приближение к целевым координатам контролируется с помощью component.drone.getOffset().
-
Речь шла о том, что в случае изолированных сетей за NAT эти блокировки не имеют значения, и этот момент требуется уточнить в первую очередь. Автор вопроса сделал это уточнение чуть раньше, пока я писал своё сообщение.
-
Если ты админишь эту локалку, то можно на роутере переадресовать трафик на локальный адрес.
-
А игровой сервер физически находится в одной подсети с твоим компьютером? Или в разных? Даже если IP твоего компьютера входит в подсеть 192.168/16, и IP игрового сервера входит в ту же подсеть, это не значит, что они физически находятся в одной сети. Даже при подключении к одному коммутатору они могут находиться в разных VLAN/ Соответственно, и друг друга они могут видеть под другими адресами. Тогда и чёрный список в конфиге не будет оказывать влияния на доступ к твоему IP.
-
Можно поднять прокси-сервер на другом IP. Но администратору игрового сервера ничто не мешает добавить в чёрный список и новый IP тоже. Поэтому для начала следует решить проблему, из-за которой твой IP оказался в чёрном списке. Как это произошло?
-
@Noni23 Не всем интересна тема 3D-печати. Тем более, мало кто хочет говорить об этом в дискорде. Предлагаю задавать вопросы здесь, на форуме. Тогда и шансов получить ответ будет больше, и ответы помогут кому-то ещё кроме тебя.
-
Насколько я помню, этот параметр задаёт возможность прохода сущностей сквозь модельки в выключенном и включенном состоянии редстоуна.
-
Можно и лайкнуть. Но отпугивает отсутствие скриншотов моделей и код, размазанный на километр. С какой целью описания форм последней модели разбиты на 9 строк? [1] = { [1] = 0, [2] = 0, [3] = 0, [4] = 16, [5] = 16, [6] = 1, texture = "planks_oak" }, Что мешает компактно оформить их одной строкой, как для первых двух моделей?
