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

WheatComp

Пользователи
  • Публикации

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

  • Посещение

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

  1. Как же тогда тут удалось обойтись без .amount?:
  2. Открываем вложенную таблицу вложенным циклом - изящно! Если можно все-таки получить доступ к значению "amount" посредством по сути цифрой (коей является индекс), то как это можно выразить в одной строчке print()-а, используя только цифры? Типа tankTable[1][1]?
  3. @eu_tomat да, потому что этот метод можно применить и к другим вложенным таблицам. значения переменных вложенных таблиц, я бы сказал (capacity).
  4. Значение получить-то можно, если так изменить первую таблицу: tank1 = {222, capacity = 333} и выводить так: print(tankTable[key][key]) А вот к значению переменной capacity уже нет доступа таким образом. Понятно, что можно получить доступ напрямую: print(tankTable[key].capacity, но как получить доступ через средства индексации и цикла?
  5. @eu_tomat Сделал таблицу, имитирующую таблицу, возвращаемую tank_controller: tank1 = {amount = 222, capacity = 333} tank2 = {amount = 452, capacity = 349} tankTable = {tank1, tank2} for key, value in pairs(tankTable) do print(value) print(tankTable[1][key]) end Выводит nil nil.
  6. @eu_tomat а нельзя ли обойтись без сложностей? Нельзя ли захардкоджить и получить доступ к значениям внутренних таблиц при помощи индекса цикла for и простого доступа вроде table[1][1][key] или table[1.1.key] или table[1][1].key? Мы же знаем, что внутри внешней таблицы - таблица?
  7. @eu_tomat понимаю, что проще всего сериализацией вывести, насчет for-а стало интересно ради понимания Lua. @serafim посмотрел рыбную ферму для робота-рыболова. Это отдельное строительство. Нет ли чего попроще для набивания опыта?
  8. Апгрейд опыта поставил, пытаюсь выкачать с помощью саженца, сажает, убирает, сажает, убирает. За 5 часов только до 6-го уровня дошел, цвет не поменялся. Пытался на ферме кобблы ставить, там раза в 2 медленнее.
  9. Иногда встречается вложенная таблица. Интересно, можно ли вложенную таблицу напечатать посредством for key, value in pairs do? Например, component.tank_controller.getFluidInTank(5) возвращает вложенную таблицу:
  10. Только что узнал, наконец-то, для чего нужно зеленое пятно у планшета. Оказывается, можно в планшет положить геоанализатор или апгрейд навигации, долго нажать на блоке и получить какую-нибудь информацию о блоке, на которой пятно. Там пишется, что нужно нажимать ПКМ 1 секунду, но у меня почему-то не пищит, и информацию не дает, ни в терминал планшета, ни в интерпретатор. Пробовал component.geolyzer.analyze(3), но показывает воздух.
  11. Вот-вот, это тот подводный камень, об который я споткнулся. Главное - об этом в туториале ни слова. Сколько таких подводных камней впереди - неизвестно... Да, оказывается можно обойтись без проводной.
  12. Значит, дело в беспроводной карте хоста? Если беспроводная карта не primary, то она не отсылает сообщение. Хотел бы уточнить, что это касается беспроводной карты 2-го уровня, 1-го уровня карта не поддерживает проводную связь.
  13. Хорошая реализация. Похоже, нужно будет делать так. Почему? Вчера провел эксперимент. 2 компа, в одном 2 карты 2-х разных типов (назовем хост), в другом только проводная карта, 1 робот с беспроводной картой. Все команды на всех устройствах вводил через интерпретатор lua. В роботе и в не-хост компе запустил =event.pull("m"). C хоста ввел modem.broadcast(123, "message"). Не-хост компьютер получил сообщение, а в роботе так и висит =event.pull("m"). Он должен быть получить сообщение, потому что modem.broadcast же выполняется на всех двух картах? На хосте проверил getPrimary("modem"), оказалось, что стоит проводной модем. Поменял primary на беспроводной модем (setPrimary) - в этом случае сообщение получают оба устройства: и не-хост компьютер, и робот. Проделал это все 2 раза с тем же результатом. А вот не-хост компьютер получает сообщение в любом случае, неважно, какая карта стоит в primary в хосте. Даже если сделать broadcast во время, когда в primary хоста стоит беспроводная карта, не-хост все равно получает сообщение, и показывает адрес беспроводной карты (в поле, где указан адрес карты-отправителя), хотя у него не установлена беспроводная карта! Если вверху, где подчеркнуто, то почему же здесь не так же (то есть не-хост не должен был получать сообщение)? В общем, не совсем ясно, для чего именно служит Primary модемов, в документации об этом мало сказано. Предполагаю, для использования в первую очередь. Тогда непонятно, почему же разный результат для модемов разного типа. Но, очевидно, при применении беспроводной карты (в случае, если в компе 2 разных карт) нужно как-нибудь обрабатывать эту особенность, можно через Ваш код, можно через invoke прямо прописав адрес карты.
  14. Да, хорошая команда. Я установил микроконтроллер, через час он запускает эту команду, роботы просыпаются и начинают собирать урожай. До апгрейда опыта еще не дошел. Можно поподробнее, где хранится этот буфер энергии? И где смотреть "алмазность", или "железность" робота? До его функции анализа ископаемых тоже не дошел, пока определяю растения. А если просто выкидывать мусор? Прописать названия, если == то дропнуть. Пока им и пользуюсь, программы небольшие.
  15. Да, Вы правы, пришел еще один сигнал. Я не стал выкладывать весь код, дабы не загромождать сообщение. В конце send.lua была еще одна строчка, отсылающая сигнал: modem.broadcast(port, "execute", data) component.invoke(address, "broadcast", port, "execute", data) это я экспериментировал с первичностью модема а modem.boradcast() почему-то не стал комментить. Она и прерывала, оказывается, pullSignal(). При удалении одной из этих строк pullSignal работает нормально, придется быть осторожнее.
  16. В документации написано, то isAvailable проверяет, есть ли первичный компонент данного типа: Это тоже, конечно же, еще один косяк разработчиков. Надо было написать component.isAvailablePrimary(). То есть эта строка проверяет не просто есть ли модем в системном блоке, а именно наличие первичного модема. Но, как сказал @eu_tomat , (было бы, кстати, любопытно посмотреть, где устанавливается такая пауза), почему-то установлена пауза в 0.1 сек. после команды component.setPrimary(). Я пытался не просто проверить наличие модема в компе, а установить модем, если можно так выразиться, "по-умолчанию". Как, например, с принтерами. В уиндоуз на какой принтер ставишь галочку "По умолчанию", этот принтер и начинает печатать, когда в какой-нибудь программе нажимаешь на кнопку "Печать". А тут у меня после программы, которая принимала данные через проводную сетевую плату, первичной была проводная карта. Но тут, похоже, действительно не надо заморачиваться с первичностью, возможно, дело было в другом. А может, надо. Сейчас разбираюсь с этим вопросом.
  17. Оказалось, что поторопился радоваться с computer.pullSignal(5). В коде (robot.lua) ниже эта команда не выполняется, робот сразу поворачивается: local robot = component.proxy(component.list("robot")()) computer.pullSignal(5) for i = 1, 4 do robot.turn(true) end Скопировал функцию os.sleep(), тоже не выполняется, программа send.lua высылает только строчку "executeFailed", причину не высылает: local robot = component.proxy(component.list("robot")()) function os.sleep(timeout) checkArg(1, timeout, "number", "nil") local deadline = computer.uptime() + (timeout or 0) repeat event.pull(deadline - computer.uptime()) until computer.uptime() >= deadline end os.sleep(5) for i = 1, 4 do robot.turn(true) end
  18. Это разве не логично? Сначала поставил, чтобы было что проверять, а затем проверил. В этом случае работает, как и должно, спасибо!
  19. Стал заморачиваться с переопределением из-за того, что после закрытия программы для беспроводного модема команда component.getPrimary("modem") выдает адрес беспроводного, соответственно строка modem.broadcast(...) приводит к широкому вещанию проводным модемом (а мне нужно было, чтобы вещал беспроводной). Эта функция - modem.broadcast(...) применима к обоим типам модемов, поэтому выход был логичным - поменять приоритет модемов. Но он оказался не логичным с точки зрения разработчиков. Было бы удобнее, если бы были отдельные типы broadcast-a, например, modem.broadcastWireless(...), который приводил бы к посылке сигнала именно беспроводным модемом. Но так не было сделано. Я вот думаю, может, в лутовой дискете "Network" есть что-то подобное? Разработчики подложили подводный камень в виде 0.1-секундной задержки и не сообщили об этом в официальном туториале. Ну чтож, их же много было, да и проект некоммерческий, насколько я понял. Может, потом исправят.
  20. И при таком коде выдает то же самое (после закрытия программы для проводной карты), при повторном запуске этой же программы для беспроводной карты без изменений работает нормально: local component = require("component") local modem = component.modem if component.isAvailable("modem") == true then print("available") component.setPrimary("modem", "a257b9") prim = component.getPrimary("modem").address print("Primary : "..prim) else print("unavail") end Понятно, что он выдает ошибку на 68-й строчке 04_component.lua, не может выполнить get.Primary("modem"), но он же сказал, что isAvailable("modem") == true?
  21. В одном компьютере установлены 1 проводной и 1 беспроводной модемы. Через проводной данные принимаются, а через беспроводной отсылаются данные рою из роботов. Каждый модем работает в разное время, с разными программами. Сначала запускаю программу для принятия данных через проводной. Закрываю, запускаю программу для беспроводной. В этот момент вылетает ошибка (фото). Каждый модем устанавливается своей отдельной программой как первичный через component.setPrimary("modem", "адрес модема"). После беспроводного программа для проводного запускается нормально, работает. Интересно, что если повторно запустить программу для беспроводного, то все работает, и Primary определяется, и файл отсылается. Вот код: local component = require("component") local modem = component.modem component.setPrimary("modem", "адрес модема") -- пробовал ставить и перед предыдущей строкой. prim = component.getPrimary("modem").address print("primary modem is : "..prim)
  22. Нужна ли эта строчка в send.lua? В этом файле ничего не принимается, вроде.
  23. Оказалось, мой косяк: local robot = component.proxy(component.list("robot")()) local computer = component.proxy(component.list("computer")()) computer.pullSignal(3) for i = 1, 4 do robot.turn(true) end определил computer, хотя он и так есть, как Вы и объяснили. Без этой строчки pullSignal работает как и должен работать. Наверное, им и буду пользоваться. Спасибо, работает, в том числе и модули можно использовать.
×
×
  • Создать...