Перейти к публикации

В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами

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

eu_tomat

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

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

  • Посещение

  • Дней в лидерах

    88

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

  1. eu_tomat

    Робот с геосканером. Часть #0 [планы]

    Интересно будет взглянуть. Придумать концепцию универсальной копалки мне так и не удалось, т.к. каждый мод вносит свою уникальную специфику. Даже уровень шума геосканера сильно влияет на оптимальный стиль копки. А ещё могут внезапно обнаружиться неожиданные препятствия, например, в виде ульев Forestry, непроходимых с помощью бура IC2, как это было с @artem211. Или, например, сейчас на EvilWorld есть шанс запутаться в лабиринте из магического стекла, установленного другими игроками. Работа с инструментами тоже сильно отличается: ванильные, IC2, Tinkers Construct, ThaumCraft – все они производятся, ремонтируются или заряжаются специфическим образом. Я тоже думал про модульную копалку, но так и не смог систематизировать возможности модов. Поэтому с интересом буду следить за твоими успехами. Ограничения EEPROM обхожу следующим образом. Если копалка используется в единственном экземпляре, то, скорее всего, это универсальный, неспециализированный робот, предназначенный не только для копки, и потому имеющий монитор, клавиатуру и диск с системой. Если в копке задействованы одновременно несколько роботов, то для координации их работы в обязательном порядке используется радиоинтерфейс, по которому и загружается программа. Потеря программы при отключении роботов не страшна, т.к. их всё равно приходится будить по вайфайке. Будящему ничто не мешает заодно передать роботам и программу, хоть модулями, хоть одним куском.
  2. Это сложнее. Тут появляется множество вариантов, эффективных в своих условиях и при этом неэффективных в других. И какие условия возникли конкретно у тебя, я не знаю. но я попробую объяснить суть проблемы. В случае генератора булыжника есть только один непрерывно добываемый малоценный ресурс. Если сундук находится над или под роботом, то оптимизация сводится к тому, чтобы перемещать ресурсы полными стаками. Робот перемещает хоть один предмет из слота, хоть полный стак за одинаковое время. А это значит, что выгодно перемещать наиболее полный стак. Заполнение слота легко отслеживается. Если сундук находится в стороне, и робот вынужден совершать поворот, то накладные расходы на освобождение инвентаря возрастают, и появляется смысл выгружать полностью заполненный инвентарь. Его заполнение тоже легко отследить. Гораздо больше вопросов вызывает перелопачивание руды киркой. С точки зрения оптимизации действий робота он должен выгружать свой инвентарь, когда хоть-что появится в последнем слоте. А если речь идёт о рудах GT, где может выпасть вторичный ресурс, то сигналом для выгрузки будет появление предмета в предпоследнем слоте. Если заранее знать, какая руда будет ломаться следующей, то в некоторых случаях можно ждать почти полного заполнения слотов с учётом максимального дропа с руды, но в данной схеме это возможно только в случае, если роботы будут обмениваться информацией по сети. Вообще говоря, для этой задачи использование двух роботов неоптимально, т.к. робот обычно ставит блок быстрее, чем его ломает второй, и если хочется повысить производительность, то лучше установить два однотипных робота на одну задачу, где каждый из них как устанавливает блок, так и ломает его. Так робот сам сможет знать, какой дроп ожидать при следующем взмахе киркой, и сможет лучше оптимизировать свою работу. Но тут возникает новый подводный камень. Эта схема удобна в случае огромного количества руды. У неё есть большой потенциал на поздних стадиях уже упомянутого GT. Но в начале игры, когда ресурсов мало, робот будет ждать полного заполнения своего инвентаря, долго не отдавая переработанные ресурсы, что неудобно. Есть компромиссный и при этом довольно эффективный вариант: робот берёт из верхнего сундука стаки руды, начиная от более полных к менее полным. Загрузив стак руды в свой инвентарь, робот устанавливает её перед собой и ломает, повторяя эти действия до полного исчерпания руды. После этого полностью освобождает инвентарь в сундук. некоторые из слотов могут оказаться недостаточно заполненными, и такая выгрузка будет не очень эффективной, но зато ценные ресурсы не будут надолго задерживаться в инвентаре робота и мешать получению других. Выработав стак руды, робот берёт следующий, один из наиболее полных, и продолжает работу, постепенно забирая и слабо заполненные стаки тоже. За время работы робота ресурсы в слотах входного инвентаря могут пополниться, поэтому имеет смысл отложить их использование до поры, пока не появится лучший выбор. Этот вариант тоже можно оптимизировать. В конечном итоге всё зависит от целей. На что должна быть ориентирована твоя программа? На максимальную скорость при быстрой подаче руд? На переработку руд в начале игры, чтобы ресурсы не задерживались в инвентаре робота? Или надо сделать хоть что-то, лишь бы оно работало с помощью максимально примитивного кода? От ответов на эти вопросы будет зависеть алгоритм работы.
  3. А зачем там спойлер? Скриншот вообще не проясняет проблему и может быть безболезненно удалён. По теме: Какое значение имеет параметр bufferChanges?
  4. Похоже, я не с первого раза понял вопрос. Требуется уточнить, что это за механизм, чтобы выбрать эффективный вариант проверки заполнения инвентаря. Это генератор булыжника?
  5. Ну, очевидно, что для этого робот никогда не должен помещать инструмент в свой инвентарь, находясь при этом под высасывающей шиной. Есть разные варианты: Например, можно удалить зарядник на один блок от робота. И тогда робот будет перемещаться на одну клетку из-под шины. А можно перемещать содержимое инвентаря роботом в стоящий сверху него сундук программным путём, а шиной высасывать уже содержимое сундука. С тем же успехом сундук можно разместить и внизу и слева и справа, главное, не давать шине неконтролируемо высасывать инвентарь робота.
  6. Тогда понятно. Шина, стоящая сверху, быстро высасывает инвентарь робота, сразу как только выполнится перенос инструмента в инвентарь с помощью inv.equip(). И перенос инструмента в зарядник с помощью robot.drop() выполниться просто не успевает.
  7. В этой программе я вообще не увидел кода для сброса содержимого инвентаря.
  8. С каким буром? Буры из IC2 вроде без проблем определяются. И какая используется версия OpenComputers?
  9. Для понимания причин проблемы следует для начала прочитать текст ошибки. Можно воспользоваться автоматическим переводчиком. Это поможет понять, что на строке 6 произошла попытка сравнения значения nil с числом, что недопустимо. Глядя на шестую строку, можно заметить условие robot.durability() <= 0.2, где явное число сравнивается с предположительным числом. Но функция может возвратить что-то иное, и, судя по всему, тот самый nil. Теперь следует задаться вопросом, в каком случае может быть возвращено значение nil. Логично предположить, что это возможно либо в случае полного отсутствия предмета в слоте инструмента, либо в слоте находится и не инструмент вовсе, что и подтверждается документацией https://ocdoc.cil.li/api:robot. Для решения проблемы следует либо дать роботу инструмент с ограниченной долговечностью, либо убрать условие проверки долговечности из программы.
  10. eu_tomat

    SpiderEye Terminal

    @Totoro, как ты такую красивую картинку сгенерировал?
  11. Соблюдён этот пункт?
  12. Что такое "неточное движение робота"?
  13. eu_tomat

    vlad3

    Можно сказать, что он обманом заставил тебя вписать его в приват. И нанёс удар, когда ты не ожидал.
  14. eu_tomat

    vlad3

    Возможно, я неправильно понимаю правила, но полагаю, что ситуация, в которой пострадавший сам подставился, гриферством не является.
  15. eu_tomat

    vlad3

    @vladimir, ты не первый, с кем это случилось. Разрешать доступ к привату на постоянной основе всегда было опасным. Всё это исключительно договорённости игроков, не касающиеся ни модераторов, ни администраторов. Видимо, придётся удалить из привата тех игроков, с которыми тебя не связывает тесное сотрудничество. Но даже если и связывает, бывает, друзья становятся врагами. Кто друг, а кто "оказался вдруг", решать, а в случае чего и страдать – тебе. В этом теремке прописан и @Asior тоже. Площадка у него странная. Часть находится в привате @vladimir, а часть в его собственном привате. Проект улья никак не предусматривал такого подхода, но, видимо @Asior не дождался освобождения заброшенных сот поблизости от @vladimir.
  16. Есть и другие. Можно использовать shell.execute. И это даже более правильно, т.к. эта функция используется внутри os.execute. А внутри shell.execute используется чтение указанного файл, его загрузка через load, и запуск. То есть, другие способы в конечном итоге сводятся к чтению содержимого файла, компиляции исходного кода и запуску. А другой отдельной функции, скорее всего, нет. Возможно, в других операционных системах есть иные способы. Нужно уточнить, для чего требуется другой способ, в какой среде выполняется программа.
  17. В OpenOS можно использовать, например, такой код: os.execute("/bin/components screen -l") Так будет запущена программа components с параметрами screen -l
  18. Для вывода нужной фразы для каждого ника можно использовать, например, такой код: local phrases = { ["вован"] = { [false]="оффлайн", [true]="онлайн" }, ["серый"] = { [false]="спит", [true]="зажигает" }, ["жека"] = { [false]="потерялся", [true]="в деле" }, } for nick,phrase in pairs(phrases) do print( nick,phrase[online(nick)] ) end Как реализовать функцию online(nick), проверяющую онлайн игрока, уже рассказали в предыдущей теме.
  19. На старом форуме тоже никогда не пользовался кнопками. Но на новом часть привычных тегов перестала работать при их вводе текстом, и я стал пользоваться кнопками. А потом и часть кнопок пропала. Но спасибо за информацию, снова включу старые навыки. Или хотя бы их часть, которая применима в новых условиях.
  20. @Asior как тебе удалось вставить спойлер? Кнопка в редакторе отсутствует.
  21. @BrightYC я бы начал с проверки отображения латиницы. Если отображается, то попробовал бы применить кириллицу без указания кодировки, с настройками по умолчанию, а кодировку на выходе попробовал бы определить либо вручную, либо с помощью каких-нибудь программ, названий не помню, но таких приходилось видеть много разных. Если это сработает, то можно попробовать выбрать нужную кодировку и проверить кодировку на выходе. Также надо проверить, в какой кодировке сохранён сам код. И подобрать кодировку, понятную контроллеру.
  22. eu_tomat

    eeee

    Можно на светлую тему переключиться. Там цвета читаемые.
  23. Байткод тоже можно преобразовать в исходный. Правда, с потерей комментариев и локальных названий. Но даже такой может иметь ценность.
  24. Это вряд ли. Кто-то всё равно разберётся в особенностях твоего кода, если программа достаточно ценна. А если она бесполезна, то вчитываться в её код и так мало желающих. Бесполезность программы является лучшей защитой от чтения кода.
×