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

Лидеры


Популярный контент

Показан контент с высокой репутацией 22.05.2023 в Сообщения

  1. 4 балла
    Не нужна, это задел на дальнейшую разработку с анализом входящих сообщений. Бывают ситуации, когда робот застрял в приватной зоне или бедроке, когда села батарея или сломался инструмент - в этом случае имеет смысл отослать статусное сообщение с координатами робота относительно хоста, а затем отключить питание Вообще роботы с дронами, имхо, самая балдёжная часть мода. Тут и автоматизация рутины, и распределенное выполнение задач, и сетевой код, и инфо-безопасность. Когда кодил аналогичную систему контроля в сурве, то сформулировал для себя несколько рекомендейшнов: Метод modem.setWakeMessage() - имба. Когда робот выполнил все задачи, можно смело его выключать, оставляя где-то на глубине в границах привата. Когда необходимо продолжить работу, шлём сетевой пакет на включение - профит. И энергия сохранена, и нажимать кнопку Power не надо Широковещательные пакеты через modem.broadcast() опасны на публичных серверах, и в 100% случаев станут причиной угона робота. В идеале, когда все машинки скрафчены, необходимо внести адреса их модемов в конфиг на хосте, а впоследствии общаться приватными пакетами через modem.send(). Либо захардкодить в роботах адрес хоста и доверять лишь ему одному, как в примере выше Дополнительные батареи - мусор. Вместо них лучше установить апгрейд опыта, построить ферму кобблы и позволить роботу фармить экспу. Спустя 2-4 реальных часа у тебя раскачается "алмазный" робот с колоссальным буфером энергии Апгрейд навигации для вычисления позиции/поворота - мусор. Вместо него куда дешевле и интереснее накодить софтверную триангуляцию, основанную на перемещениях робота и расстоянии, которое "пролетел" сетевой пакет. А поворот можно определить с помощью геоанализатора, ломания/установки блоков и вращения робота Софтверное позиционирование - имба. Вычисляешь единожды координаты/поворот робота - и корректируешь их при вызове move/turn. Взамен появляется возможность автоматизировать перемещение в любую указанную точку. При отключении питания имеет смысл сохранять эти данные на диске, либо определять их автоматически при включении Геоанализатор - легальный чит. Однако использовать его в штатном режиме, сканируя вертикальными "столбцами" - выстрел в ногу, т.к. точность результатов на расстоянии в 10+ блоков будет отвратная. Вместо этого стоит заюзать опциональные аргументы scan(), анализируя небольшие горизонтальные плоскости 8х8 блоков вокруг робота, постепенно прокапывая вниз. Точность при этом станет как советском станке Экран/клавиатура/дисковод и полноценная ОС - штуки ситуативные, т.к. стоимость сборки улетает в космос, а выхлоп сомнительный. Мнение не навязываю, но я предпочитаю ставить больше апгрейдов инвентаря/крафтинг/редстоун-плату/etc., делая машинку универсальнее и контролируя её по сети Апгрейд крафтинга очень недооценён. Каким бы большим ни был инвентарь, он гарантированно заполнится всякими андезитами/мусоритами. Эту проблему в соло решает крафтинг, упаковывающий ресурсы в стаки, особенно на серверах с модами типа экстраутилит, позволяющими "сжимать" кобблу Жёсткий диск 1 тира - топ за свои деньги. Всегда приятно иметь возможность сохранять/загружать координаты робота или довольно объёмные "снимки" местности с геоанализатора
  2. 2 балла
    computer.pullSignal ждёт первого сигнала определённое время. То, что ей передана пятёрка, означает, что ждать будет не дольше 5 секунд, но если какое-то событие придёт раньше (что здесь и происходит: возможно, подключение компонентов), то выйдет раньше. UPD. @ECS уже говорил про это в предыдущих сообщениях. Просьба внимательнее читать ответы. А os.sleep так не заработает: синтаксис function tbl.func() ... end создаёт новую функцию и кладёт её в поле "func" таблицы tbl. В данном случае функция кладётся в поле "sleep" таблицы os. Но такой таблицы в биосах нет. Либо нужно определить табличку эту: local os = {} function os.sleep(timeout) --[[ сюда код функции ]]-- end Либо вообще не пытаться класть функции в таблицы (что наиболее разумно): local function sleep(timeout) checkArg(1, timeout, "number", "nil") local deadline = computer.uptime() + (timeout or 0) repeat computer.pullSignal(deadline - computer.uptime()) until computer.uptime() >= deadline end Здесь ещё пропал event.pull, потому что event в биосах тоже отсутствует. (Да и в OpenOS event сначала нужно получить через require.) computer.pullSignal для наших целей достаточен.
  3. 1 балл
    Ты ставишь компонент модема перед тем как проверить есть ли он. А почему ты используешь примари? component.invoke(addrs, functionName, ...) <-- обращается именно к компоненту addrs, имя функций пишешь в строковом варианте, например: local address = '0ab' local cmp = require('component') local address = cmp.get(address) --Получаем полный адрес из скороченого, обезательно local sides = require('sides') cmp.invoke(address,'setOutput',sides.up,5) print(cmp.invoke(address,'getOutput',sides.north)) cmp.invoke(address,'setOutput',sides.down,12)
  4. 1 балл
    Что именно требовалось, мне до сих пор не особо понятно. Для примера опишу свой подход. Я использую символические ссылки для тестовых целей в творческом режиме. Мои файлы с программами и конфигами обычно находятся в удобном для разработки месте, вне игрового каталога. Типичный игровой эксперимент я заканчиваю удалением сохранения. При этом программы, находившиеся на компьютерах и роботах, не теряются, т. к. моё сохранение игры обычно содержит не сами программы, а лишь ссылки на них. При последующих экспериментах я создаю ссылки на нужные мне файлы и каталоги, используя комбинацию клавиш C-x s в Midnight Commander. Иногда я подменяю ссылками каталоги самих дисков OC. Получаются как бы клонированные диски. С точки зрения игры эти диски не являются клонами, но по факту они ссылаются на общее хранилище. Если требуется провести масштабный эксперимент с десятками роботов, то я беру их из креатива. В момент установки роботов в мир появляются каталоги, соответствующие их дискам. Для массовой подмены каталогов я использую скрипт, подменяющий только пустые каталоги с подходящими именами: #!/bin/bash # Подмена каталогов жёстких дисков OpenComputers ссылками на каталог-источник # Параметры запуска: каталог-источник, каталог OpenComputers сохранения игры dirSource=$1 dirTarget=$2 for dir in $dirTarget/*; do # обрабатывать только каталоги if [ ! -d "$dir" ] then continue; fi # обрабатывать только каталоги с подходящими именами if ! (basename "$dir" | egrep -q \ '^[0-9,a-f]{8}-[0-9,a-f]{4}-[0-9,a-f]{4}-[0-9,a-f]{4}-[0-9,a-f]{12}$') \ then continue; fi # обрабатывать только пустые каталоги if [ -n "$(ls -A ""$dir"")" ] then continue; fi # подмена каталога ссылкой на источник rm -r "$dir" ln -s "$dirSource" "$dir" done
  5. 1 балл
    Один из игроков в мой модпак сделал видео по тому как сделать убивающего робота.
  6. 1 балл
    Записал небольшой гайд о простом функционале
  7. 1 балл
    С/Assembly все кто с Windows играют знают, без этого не как
  8. 1 балл
    Респект за соулс от мира опенкомпов! Вики очень достойная, но логику работы сложно осилить даже на примере \0ZZ, учитывая необходимость перма-скроллинга то по списку алиасов в сырце, то по списку операторов в самой вики. Да и без поиска тут не обойтись. Пожалей наши мыши! Интереса ради я решил вникнуть в первый пример: 1) Читаю команду \0, понимаю, что это useDown(), вопросов нет 2) Читаю команду Z, осознаю, что это алиас на %`~F'ta'N` ?M*'F?M`FN``RRMN`', приступаю к расшифровке 3) Читаю команду %, смекаю, это ещё один алиас на ?{<a>==nil}, отвечающий за проверку истинности результата выполнения некоего Lua-выражения. А какого? 4) Судорожно ищу, что такое <a>, и вроде бы даже нахожу нужную секцию: То есть, согласно вики, a - это программа, которая... что? Которая названа a? 5) Пытаюсь найти в сырцах некую программу с названием а, но тщетно 6) Допускаю, что, скорее всего, a - это переменная, которая пока еще не определена в текущем окружении. Вроде бы. То есть, наверное, выражение ?{<a>==nil} эквивалентно if a == nil. Или a - это все же программа? Ладно, хрен с ним 7) Возвращаюсь к пункту 2, читаю символ `, вновь обращаюсь к сырцам. В сырцах не нахожу. Видимо, оно в вики? Скроллю вики, нахожу искомое: Так, падаж-ж-жи! Интересно, зачем столько вариантов... для возможности использовать внутри строк другие кавычки, когда требуется? Если да, то это хорошо, хотя классический эскейпинг через \" был бы правильнее, т.к., например, я не смогу заюзать все 3 варианта кавычек в строке "hello `sunny`, you are 'so shiny' and "beautiful"". Или все же смогу? Энивей иду вперед 8) Натыкаюсь на символ ~, определяющий алиас на подпрограмму ~F'ta'. Судя по вики, у нас теперь определена некая подпрограмма F, выполняющая команды ta 9) Ищу, что такое t и a. Сырцы говорят, что t отвечает за robot.turn(clockwise). Вероятно, переменная а и отвечает за поворот по часовой стрелке? Вроде бы понятно... 10) Читаю новый неизвестный символ N. Хоспади, только не алиас... МАМОЧКИ, ЭТО ОН. Ищу в сырцах содержимое, нахожу логику инверсии перменной a -a{not <a>}... не-е-е, все, убейте меня. Софтина хорошая, идея клёвая, но нервная система у меня одна хд
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...