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

eu_tomat

Модераторы
  • Публикации

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

  • Посещение

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

    331

Все публикации пользователя eu_tomat

  1. Проверил у себя на компьютере, gsub в моём примере выполнился за 2.5 сек. А стандартный таймаут для TLWY составляет 5 сек. Запас по времени маловат, поэтому решение неустойчивое, на слабом железе работать не будет. Предлагаю в вызываемую функцию добавить os.sleep(0).
  2. Лучше тогда разбирать web-версию гитхаба. Решение, конечно, медленное, но зато не требует обновлять код установщика при изменениях файловой структуры. Можно даже комбинировать вызовы к API и Web в зависимости от исчерпания лимита.
  3. @AlexCatze Я столкнулся с неприятным свойством API GitHub: https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting Простым языком: для анонимных пользователей доступно не более 60 запросов в час с одного IP-адреса. Из-за этого решение на базе API может оказаться нестабильным. Особенно, учитывая, что на одном IP может работать несколько серверов, и на каждом сервере может играть больше одного игрока.
  4. Пойдём от обратного: Что мешает хранилищу открытого кода быть проприетарным?
  5. Я забыл сразу упомянуть один важный момент. Надо как-то отличать каталоги от файлов. Интуитивно понятное решение: искать в тексте ссылку на raw-формат файла. Но оно потребует дублирования запроса и ожидания отдачи страницы. Есть более быстрое решение: сразу запрашивать сырой формат. Если получишь 404, значит это не файл, а каталог. Это решение потребует меньше трафика и времени на ожидание. Скорее всего, гитхаб имеет API, позволяющий избежать и лишнего трафика и этих трюков с парсингом. Моё решение следует рассматривать как отправную точку, интуитивно понятную, но вряд ли оптимальную.
  6. Вот пример скрипта, считывающую ссылки на элементы каталога: 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 Далее потребуется рекурсивно обойти все каталоги и найти в них файлы.
  7. @AlexCatze Есть два предложения: Немного упростить гайд, чтобы не заставлять пользователя возвращаться туда-сюда: Пишем проще: заливаем на гитхаб..., копируем адрес..., создаём файл..., вставляем адрес... Дописать установщику возможность динамически считывать структуру репозитория, например, из каталога https://github.com/AlexCatze/racoon-dev/installer Страницы разбираются не сложно, по фразе data-pjax="#repo-content-pjax-container". Это позволит пользователю не повторять процедуру при смене структуры каталогов или добавлении и удалении файлов.
  8. eu_tomat

    No such component

    Да, действительно. Сразу я не смотрел скриншоты, а ориентировался по описанию: Из этой формулировки не ясно, как именно не помогло, и что ошибка генерируется именно при выполнении component.isAvailable. Я сейчас сравнил работу component.isAvailable в 1.6.2.12 и 1.7.5.1290. Отличий не вижу. При этом в 1.7.5.1290 подобная проблема у меня ни разу не возникала. Проблема вряд ли в библиотеке component. Ошибка возникает только на сервере или и в одиночной игре тоже? И что это за сборка?
  9. eu_tomat

    No such component

    Именно component.isAvailable() вызывает ошибку? Если так, то на какой версии Minecraft и OpenComputers?
  10. eu_tomat

    No such component

    Почему подозрение пало на библиотеку component? component.isAvailable позволяет определить наличие компонента определённого типа, но не гарантирует, что найден именно тот компонент, что когда-то был сохранён в переменной программы.
  11. Да, в современных версиях ComputerCraft компьютер включается сам при загрузке чанка, в котором находится компьютер. В OpenComputers выполнение программы приостанавливается при выгрузке чанка, а при загрузке продолжается ровно с того же места, где оно было приостановлено. В ComputerCraft при выгрузке чанка выполнение программы обрывается, а при загрузке чанка компьютер включается и выполняет стартовый скрипт.
  12. Ага. Весь секрет в формулировках. Первая: Это формулировка требует обнаруживать факт перезапуска мира. Эта задача не всегда имеет решение. Последняя: Эта формулировка требует всего лишь настроить автозапуск программы при загрузке компьютера. Вот она, сила формулировок: Компьютеры ComputerCraft перезагружаются не столько при перезапуске мира, сколько при перезапуске чанка. Отслеживать загрузку мира в этом случае не требуется. Задача упрощается. Компьютеры перезагружаются не только при перезапуске чанка, но и механиками самого мода. Отслеживать перезагрузку чанка не требуется. Задача упрощается ещё сильнее. Компьютер загружается не только при его перезагрузке, но и просто при включении. Отслеживать факт перезагрузки компьютера также не обязательно. А это уже совсем простая задача!
  13. Эта идея сгодится для того, чтобы программа запустилась в момент включения компьютера. Но тогда появится новый вопрос: как включить компьютер в момент загрузки мира? И, опять же, компьютер в незагруженном чанке в любом случае не включится, даже если загружен мир.
  14. В этих условиях задача вряд ли имеет решение. Компьютер не отличает перезагрузку мира от перезагрузки чанка, в котором находится этот компьютер. Да и перезагрузку чанка можно однозначно идентифицировать не на всех серверах.
  15. component.drone.move(...) возвращает управление в программу, не дожидаясь завершения движения. Приближение к целевым координатам контролируется с помощью component.drone.getOffset().
  16. Речь шла о том, что в случае изолированных сетей за NAT эти блокировки не имеют значения, и этот момент требуется уточнить в первую очередь. Автор вопроса сделал это уточнение чуть раньше, пока я писал своё сообщение.
  17. Если ты админишь эту локалку, то можно на роутере переадресовать трафик на локальный адрес.
  18. А игровой сервер физически находится в одной подсети с твоим компьютером? Или в разных? Даже если IP твоего компьютера входит в подсеть 192.168/16, и IP игрового сервера входит в ту же подсеть, это не значит, что они физически находятся в одной сети. Даже при подключении к одному коммутатору они могут находиться в разных VLAN/ Соответственно, и друг друга они могут видеть под другими адресами. Тогда и чёрный список в конфиге не будет оказывать влияния на доступ к твоему IP.
  19. Можно поднять прокси-сервер на другом IP. Но администратору игрового сервера ничто не мешает добавить в чёрный список и новый IP тоже. Поэтому для начала следует решить проблему, из-за которой твой IP оказался в чёрном списке. Как это произошло?
  20. @Noni23 Не всем интересна тема 3D-печати. Тем более, мало кто хочет говорить об этом в дискорде. Предлагаю задавать вопросы здесь, на форуме. Тогда и шансов получить ответ будет больше, и ответы помогут кому-то ещё кроме тебя.
  21. Насколько я помню, этот параметр задаёт возможность прохода сущностей сквозь модельки в выключенном и включенном состоянии редстоуна.
  22. Можно и лайкнуть. Но отпугивает отсутствие скриншотов моделей и код, размазанный на километр. С какой целью описания форм последней модели разбиты на 9 строк? [1] = { [1] = 0, [2] = 0, [3] = 0, [4] = 16, [5] = 16, [6] = 1, texture = "planks_oak" }, Что мешает компактно оформить их одной строкой, как для первых двух моделей?
×
×
  • Создать...