Totoro
Гуру-
Публикации
1 950 -
Зарегистрирован
-
Посещение
-
Победитель дней
289
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Totoro
-
Дополню минигайд тем, что документация мода OpenPeripherals содержится прямо в игре. Надо набрать в консоли команду openp/docs <side> И на экране появится док по прибору подключенному со стороны side. А инфу по конкретному методу можно узнать так: openp/docs <side> <methodname> Последний параметр - прозрачность бокса. В этом случае - 0.2. Кроме того в очках есть еще пара интересных команд. Например - addGradientBox(int x, int y, int width, int height, int color, double alpha, int color2, double alpha2, byte gradient). Или - addLiquid(int x, int y, int width, int height, int id).
- 56 ответов
-
- Управление
- Терминал
-
(и ещё 1 )
Теги:
-
У компьютеров очень тихий динамик. Предлагаю поставить сирену из Nuclear Control На неё надо просто подать сигнал редстоуна.
- 56 ответов
-
- 3
-
-
- Управление
- Терминал
-
(и ещё 1 )
Теги:
-
А ПКМ?
-
OpenComputers 1.4.4 Небольшой патч вдогонку. Добавлено: Креативные корпуса для Дрона и Микроконтроллера. Добавлено: Преконфигурированный Робот, Микроконтроллер и Дрон среди блоков в креативе (до этого их приходилось собирать в ассемблере, даже в креативе). Тем не менее, Дрон и Контроллер все еще требуют запрограммированный EEPROM для работы. Добавлено: Рецепт клонирования EEPROM: если положить два чипа в верстак - на выходе будут два чипа с одинаковыми данными. Если один чип пустой, копироваться будет чип с данными. Если оба чипа имеют данные - копироваться будет первый из них. Добавлено: Опции Waila для получения информации о уровне энергии, адресе и названии компонента. Добавлено: Функции eeprom.getSize, eeprom.getChecksum и eeprom.makeReadonly(checksum). Добавлено: Имплементация параметра file:read("*n") (позволяет читать из файла числа). Изменено: Подсказки к девайсам в инвентаре теперь окрашены в соответствии с уровнем. Пофикшено: Функции robot.drain и robot.fill не всегда возвращали объем перемещенного. Пофикшено: К EEPROM можно было получить доступ из сети (хакеры упустили свой шанс =)). Пофикшено: EEPROM компонент загружался слишком рано в flash.lua. Пофикшено: Смещение в слоте апгрейда-контроллера цистерн. Пофикшено: Загадочное исчезновение предметов в NEI . Пофикшено: NullPointerException в драйвере к AE2 контроллеру, когда каналы AE2 отключены.
-
Через пару дней тоже к вам присоединюсь.
-
У него свой компонент - drone. Плюс многие из функций робота умеет использовать. http://minecraft-ru.gamepedia.com/OpenComputers/%D0%94%D1%80%D0%BE%D0%BD
-
OpenComputers 1.4.3Новый релиз, к радости Алекса Что нового получит сервер, после обновления: Добавлено: Дроны. Менее мощные, но более быстрые роботы, основанные на классе Entity (существа). Добавлено: Точки доступа (Access Point) теперь могут работать просто как точки доступа. (То есть можно отключить пересылку полученного беспроводного сообщения между точками. Кто там жаловался, что пара точек доступа кладет сервер?) Добавлено: Микроконтроллер 2 уровня. Как очевидно из названия, в него можно поставить платы второго уровня (т.е. красные платы которые умеют работать с многожильным редстоуном и беспроводные сетевые платы). Добавлено: Плата-мировой сенсор (World Sensor Card), интеграция с Galacticraft, позволяет узнавать информацию о погоде. Добавлено: Апгрейд-лассо. Предназначен для таскания животных дронами. Добавлено: Функция, которая позволяет изменить цвет световой полоски у робота. Добавлено: Некоторые блоки теперь имеют редстоун сигнал состояния. Например компьютер, в зависимости от того, включен он или нет. Добавлено: Некоторые блоки теперь поддерживают BuildCraft's IHasWork API. То есть, кроме редстоун сигнала состояния, вы можете использовать на этих блоках гейты, и состояние гейтов "Has Work" Изменено: Быстрая отрисовка GPU. ("Finally got around to do some proper testing and verified the old limits were a tad too conservative. It only took me a year!" (с) Sangar) Пофикшено: Потенциальный краш при включении компьютера на старых версиях Windows. Пофикшено: Красные платы 2 уровня были недоступны, при отсутствии мода на многожильный редстоун. Пофикшено: Все баги найденные в бете. P.S. Особенно радует возможность перекрасить огоньки на роботах. Ускорение GPU тоже ничего.
-
Лучше в воксельном редакторе. Например Slab6 (в котором я моделю некоторые штуки) или VoxelShop. Загвоздка в одной вещи - нужно расковырять бинарный формат этих моделей (сохраненных в файл) и написать конвертер, который перегонит модель в голограмму. В какой-то своей теме (лень искать :P ) я описывал замысловатый способ сделать это используя мой конвертер из schematic-файлов. Вкратце: 1) Создаем (или конвертируем из полигональной) воксельную модель. 2) Конвертируем в schematic (в цветную шерсть) 3) Распаковываем 4) Перегоняем с помощью моего конвертера в простой формат для голограммы
-
А. Я не об этом. Я о том, можно ли говорить о проблеме состояния гонки и критических точек применимо к сопрограммам (coroutine) Lua. Исключая те случаи, когда косяк возник по вине программиста.
-
Аргументацию в студию! Пожалуйста. Хочу разобраться с этим вопросом.
-
А эти проблемы актуальны для сопрограмм Lua? Проблема может возникнуть при неправильном проектировании программы (например доступа к файлу), но это уже проблема программиста а не библиотеки. Или я ошибаюсь?
-
Верно. Следовательно, весь Муравейник может развернуть один робот, который имеет апгрейды инвентарь, контроллер инвентаря, верстак и генератор (или панель). Пришла интересная мысль. При наличии RailCraft может ли робот поставить зарядник, конвертер и Clockwork Engine, а далее заряжать сам себя периодически "подкручивая" пружину двигателя?
-
Насчет лавы не уверен, но ездить на любом горючем материале или заряжаться от солнца могут и роботы. Им тоже не нужна база. А вот реализация более сложной системы, когда роботы воспроизводят себя, на черепашках будет действительно проще. (С тех пор как роботы собираются не на верстаке, а в сборщике, который требует для работы внешний источник энергии.) Чтобы упростить задачу, можно изменить стартовые условия и включить в минимальный "набор для захвата мира" сборщик и угольный генератор.
-
Судя по всему, тебе нужен API redstone (или, кратко - rs). Описание здесь - http://computercraft.info/wiki/Redstone_(API) Краткий перевод здесь - http://minecraft-ru.gamepedia.com/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Xytabich/ComputerCraft/API/Redstone Делаешь примерно такую программу: while true do event = os.pullEvent("redstone") -- ждем сигнала if rs.getAnalogInput("left") == rs.getAnalogInput("right") then rs.setOutput("top", 15) -- если сигналы слева и справа совпали по силе - шлем сигнал вверх end end Там есть три набора функций: redstone.getInput - возвращает просто true/false если есть/нет сигнала с заданной стороны redstone.getAnalogInput - возвращает числовое значение от 0 до 15 redstone.getBundledInput - для работы с пучками проводов RedPower Используй какой нужен.
-
Не думал, что кто-то серьезно будет строить его, поэтому не сделал удобного интерфейса для настройки Лифт строится так: делается рельса, этажи. На первом этаже стоит блок редстоуна или факел. То есть сигнал подается всегда, чтобы вагонетка не упала с рельсы. С тыльной стороны ставится компьютер, а его монитор используется как монитор первого этажа. Скачиваем на него программу Elevator, изменяем константу TRACK_SIDE в начале. Она обозначает в каком направлении на рельсу будет подаваться сигнал редстоуна на этажах. Может принимать значения north, south, west и east (или back, front, right и left соответственно). Далее надо сохранить и запустить на этом компьютере программу Elevator (должна появиться зеленая менюшка с одной кнопкой). Теперь можно подключать этажи. Каждый этаж - это пара монитор и красный контролер (красные блоки на скриншотах сверху). Их можно соединить одним длинным кабелем с компьютером, который стоит внизу. Хитрость в том, что этажи надо подключать поочередно. Чтобы они не перепутались в программе. Сначала первый контроллер и монитор (они создадут кнопку "2" в меню), затем следующие контроллер и монитор (в меню появится кнопка "3") и т.д. Я сделал так, чтобы можно было соединить все одним кабелем и не мучаться с назначением адресов вручную. Все, осталось оторвать клавиатуру от самого первого монитора - и можно пользоваться. По клику на кнопке, контроллер соответствующего этажа выдаст сигнал на ту сторону, которая обозначена в начале программы константой TRACK_SIDE и вагонетка передвинется.
-
Чтобы загрузить стандартную OpenOS - да. Нужен Lua BIOS (или свой чип выполняющий аналогичные действия). С одного только EEPROM тоже можно загрузиться. Если написать свой. (Я в блоге писал про особенности программирования EEPROM'а). Всю нужную функциональность надо будет тоже самому описать в коде (не больше 4 Кб, если больше - надо выносить код. На дискету (как делает OpenOS) или подгружать из сети). Например надо будет забиндить видеокарту к монитору, иначе не будет видно изображения.
-
Короче, с наступающим Новым Годом, друзья P.S. Ёлка.
-
=) На сервере IT 1.7.10 можно познакомиться с микроконтроллерами и немного их попинать.
- 21 комментарий
-
- 3
-
-
- eeprom
- контроллер
-
(и ещё 1 )
Теги:
-
Надо пробовать. Еще насчет приватов надо проверить. А то один дрон будет хозяина петлей держать, а второй - грабить. =) Спасибо, исправил.
-
Спасибо =)
-
Дроны - как керосин. Они есть везде. Еще года два назад это было просто еще одно интересное видео на Ютубе. Год назад они вдруг оказались в интернет магазинах. Затем просочились в рекламу на ТВ, и вот теперь - они есть и в OpenComputers! Пришла пора с ними разобраться. 1. Матчасть Дрон, в данном случае - квадрокоптер, это беспилотный летающий аппарат, приводимый в движение двумя парами горизонтальных винтов. Приостановливая вращение винтов с одного боку, дрон двигается в сторону (стрейф). Эти винты вращаются в разном направлении (два - по часовой срелке и два - против), за счет чего дрон не нуждается в стабилизирующем хвостовом пропеллере (как вертолет). За счет этого же он и разворачивается в воздухе, замедлив вращение однонаправленной пары винтов. Дрон обладает небольшой массой, для экономии энергии, которой у него не много (на 10-30 минут полета в среднем). (с) Википедия 2. Дроны и OpenComputers Приблизительное изображение дрона в OpenComputers =): В мире Майнкрафта дрон представляет из себя "сущность" (Entity). Это значит, что он обладает возможностями мобов Майнкрафта. (В то время как робот - это блок.) Его можно сдвинуть с места толкая. Он умеет пролетать сквозь двери и калитки (в отличии от робота). Он движется не последовательно, из блока в блок, а из точки в точку. Причем маршрут может лежать по диагонали. Конечно, движется он по кратчайшей линии, и если на пути окажется стена - дрон столкнется с нею. Программирование дрона как две капли воды похоже на программирование микроконтроллера. Вы точно так же записываете программу на EEPROM, и при необходимости меняете ее на верстаке. Только в отличии от контроллера, вам становится доступен новый компонент: drone. Подробнее об командах дрона можно узнать здесь: OpenComputers/Дрон. (Или здесь: ocdoc.wiki (англ.)) 3. План Нужна какая-нибудь несложная задача, для целей эксперимента. Используем программку send из предыдущего поста, для удаленного управления. Зальем ее на планшет. А дрон пусть... носит свиней. Будем оригинальными и непоследовательными. 1. Команда 'add X Y Z Name From'. Добавляем точку Name к маршруту, цепляя ее к точке From. Зададим дрону последовательность точек, которые образуют граф - безопасные маршруты. 2. Команда 'catch' - дрон ловит свинью. 3. Команда 'drop' - дрон выпускает свинью. 4. Команда 'to X' - дрон летит в точку Х. Для начала не будем особо заморачиваться с графом маршрутов. Это будет простое неориентированное дерево. Примерно такое: 4. Строим полигон Построим что-нибудь подходящее для тестов. Отметим ключевые точки будущего графа красными блоками. А синий блок - будет стартовой площадкой дрона. Поскольку я играю без модов на энергию, мой планшет и дрон будут работать вечно. И я не заморачиваюсь станцией подзарядки. Иначе, к схеме выше было бы необходимо добавить станцию, где дрон мог бы зарядить аккумулятор. 5. Пишем программу Скрипт для удаленного управления скопипастим из прошлого поста, подправим, чтобы умела отправлять несколько переменных и зальем на планшетик, для удобства. (Для этого, соберите планшет - не забудьте клавиатуру и видеокарту! - положите его в зарядник и запустите с подключенного компа команду install. Укажите адрес винчестера планшета - и все, что было у вас на компе автоматически загрузится в планшет, включая даже ваши собственные программы.) local com = require('component') local modem = com.modem local args = {...} modem.broadcast(27, table.unpack(args)) io.write("Message: ") print(table.unpack(args)) Далее - более сложная часть. Программа дрона. Программа предназначена для EEPROM. Значит соблюдаем те же правила: используем computer, component и API имеющихся у дрона компонентов. Включая его родной компонент drone. В нашем случае, дрон вооружен апргейдом-лассо (leash) и беспроводной сетевой картой (modem) для связи. Стоит отметить, что процесс отладки программы (по крайней мере в текущем билде мода) достаточно неудобен. В случае ошибки дрон отказывается включиться, издав тонкий писк, и не выводя никакой информации. Получить отчет об ошибке при помощи анализатора не выйдет - ведь Shift+ПКМ просто снимает дрона. Автор обещал в скором времени это исправить. Ну а пока - помучаемся. Отредактировать чип в стороннем редакторе, не вынимая его из дрона тоже не выйдет. В отличии от файловых систем, которые имеют удобную папку вида /saves/World/opencomputers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/, чипы EEPROM хранят свой код в NBT тегах предмета. Этим же обусловлено и ограничение размера кода в 4 килобайта. 5.1. Основная часть Это цикл который ждет указаний, а затем запускает соответствующую функцию. drone = component.proxy(component.list("drone")()) modem = component.proxy(component.list("modem")()) leash = component.proxy(component.list("leash")()) modem.open(27) route = {} path = {} current = "" while true do name, _, sender, _, _, message, x, y, z, point, from = computer.pullSignal(1) if name == "modem_message" then if message == 'add' then add(tonumber(x), tonumber(y), tonumber(z), point, from) if current == "" then current = point end elseif message == 'to' then to(x) elseif message == 'catch' then catch() elseif message == 'drop' then drop() end end if #path > 0 and drone.getOffset() < 1 then drone.move(route[path[#path]].x-route[current].x, route[path[#path]].y-route[current].y, route[path[#path]].z-route[current].z) current = path[#path] path[#path] = nil end end modem.close() Чтобы облегчить себе жизнь (и тестирование bios), вы можете сделать так: напишите заглушку для компонента drone (и других, если надо), вроде этой: http://pastebin.com/EVYzN5Bj Просто скопируйте в папку на компьютере, где вы пишете программу для дрона. Затем измените первые строки программы следующим образом: component = require('component') computer = require('computer') drone = require('drone') modem = component.modem -- leash = component.proxy(component.list("leash")()) Затем добавьте в цикл условие выхода по нажатию кнопки: if name == 'key_down' then break end И вы можете просто запустить вашу программу для дрона на компьютере. Разумеется полноценной эмуляцией дрона тут и не пахнет, зато очень удобно отслеживать глупые синтаксические и логические ошибки. Как устроен код основного цикла? Переменная route - хранит таблицу "вейпоинтов" (waypoints). Это вершины графа и информация о связях между ними. Переменная path - хранит путь от текущей вершины до цели. Переменная current - отмечает текущее местоположение дрона в графе. В цикле мы читаем получаемые сообщения и вызываем соответствующие функции. Первая переданная вершина считается дроном текущей. Во второй части цикла происходит проверка. Если путь до цели - не пуст (это значит, что дрону надо куда-то лететь) и дрон уже долетел до текущей вершины (getOffset()), то программа берет следующую вершину из path, отправляет дрона к ней и объявляет ее текущей. 5.2. Функции-команды Теперь последовательно добавим функции для каждой команды. function add(x, y, z, name, from) route[name] = {x=x, y=y, z=z, link = {}} if from ~= nil then if route[name] == nil or route[from] == nil then drone.setStatusText("Error!") else table.insert(route[name].link, from) table.insert(route[from].link, name) end end end Тут все просто. Пишем вершину в список. Если он связана с другой вершиной (from ~= nil), то в специальную табличку link заносим две связи: из name в from, и из from в name. function search(target, point, prev) for key, name in pairs(route[point].link) do if name == target then table.insert(path, point) return true end end for key, name in pairs(route[point].link) do if name ~= prev then if search(target, name, point) then table.insert(path, point) return true end end end return false end function to(name) path = {} table.insert(path, name) search(name, current) end Функция to обнуляет старый путь (на всякий случай), затем вставляет в него цель пути (name) и запускает функцию search, которая рекурсивно ищет и записывает остальные промежуточные вершины на маршруте от name до current (текущей локации). Функция search сделана достаточно примитивно (возможно вы предложите более эффективный способ?). Поскольку мы договорились, в целях упрощения использовать граф-дерево (не содержаший петель), от любой точки к другой существует один и только один маршрут, который функция и находит перебором связанных вершин. function catch() for c = 2, 5 do if leash.leash(c) then return true end end return false end function drop() leash.unleash() end Тут все элементарно. 6. Подготовка Пишем программу на дрона, заряжаем планшет и выдвигаемся в зону действий. Дрона ставим на синий куб (стартовая площадка) и включаем. После уточнения на местности, составляем карту вейпоинтов и строим на бумажке будущий граф: Для каждого загона добавлены две точки - name и name_up. Основные "трассы" дрона лежат на высоте в 6 блоков. А в каждом загоне спускаются к земле. (Чтобы заарканить животное, выстреливая лассо вбок, дрону желательно находиться на одном уровне с жертвой). С планшета вносим координаты в память дрона. Примерно так: Главное - не ошибиться. Т.к. в код не была добавлена защита "от дурака" =) Алгоритм позволяет добавлять вершину "на лету". В любой момент вы можете добавить еще одну ветку к схеме. Теперь все готово к тесту. 7. Запуск Все готово. Проверим, как он двигается. Введем send to sheeps в консоль планшета. Дрон уверенно поднимается в воздух и опускается в загоне в овцами. Теперь введем send to pigs. Функция search снова вычислит путь и робот переместится в указанную вершину: Функции catch и drop тоже работают штатно =) Хотя и не лишены некоторых глюков (ведь физика веревки не просчитывается): 8. Итоги а) Дрон - любопытная штуковина. б) Полный код прошивки. использованный в этом посте - здесь: http://pastebin.com/Cy1UR6vy в) Навигация по вейпоинтам - интересный и очень распространенный способ организации сложного движения. Схему можно усложнить - опционально добавлять только одну связь в таблицу link - тогда получатся ребра с односторонним движением. Добавить петли, оптимизировать поиск кратчайшего пути. Еще можно облегчить правление дроном - хранить все команды для конкретной задачи в виде файла-скрипта, который запускать одной командой и т.д. Enjoy!
-
Пока что в ОС нет ничего лишнего. Я не думаю, что автор будет изобретать свой ТЯР. Ибо во-первых мод просто поддерживает интерфейсы к уже существующим тярам. А во-вторых мод придерживается простых правил - если есть моды на энергию - они могут быть подключены к компьютерам. Если играешь без модов на энергию - компьютеры энергии не требуют. Всякие добавляемые плюшки просто расширяют охват "компьютеризации". Чтобы компьютер был не просто фиговиной, которую зачем-то строят серверные фрики, а полезной и интересной вещью. (Моя точка зрения.) P.S. А свой моб есть - дрон.
-
Сможет, если собрать полноценный компьютер. Но поскольку для такой небольшой задачи было решено воспользоваться микроконтроллером, Lua BIOS не подойдет. Ведь у микроконтроллера нет файловой системы.
- 21 комментарий
-
- 1
-
-
- eeprom
- контроллер
-
(и ещё 1 )
Теги:
-
В последних версиях OpenComputers обрастает всякими загадочными вещами. Игроки, которые только только освоились с предыдущей версией вдруг понимают, что надо изучать все заново. "А пошло оно все!" - думают игроки, и уходят на версию 1.3.6, или переучиваются на ComputerCraft, который проще, и не требует непонятного. А одна из самых загадочных - неведомый EEPROM. Это такая мелкая хрень, без которой не работает ни один компьютер, или даже робот. Хорошо еще, что есть стандартный EEPROM который называется Lua BIOS. Он легко крафтится и заставляет работать компьютеры как и раньше. Но найдем задачку посложнее, где Lua BIOS не поможет. Попробуем собрать микроконтроллер, который будет управлять входными дверями. 1. План Представим, как оно должно работать. Слева от двери (если входить) - микроконтроллер. Ради понтов, возьмем Микроконтроллер 2-ого уровня и поставим в него беспроводную сетевую плату. Кроме того добавим красную плату, чтобы управлять дверью. 1. Если контроллер принимает сигнал "open" - он открывает дверь. 2. Если примет сигнал "close" - он закрывает дверь. 3. Если примет посторонний сигнал - взрывает динамит. Дабы сокровища не достались хакерам. Для управления задействуем любой комп, у которого тоже будет беспроводная плата (или точка доступа). 2. Крафтим контроллер С этим проблем не возникнет. Потому, что я играю в креативе :P . Открываем NEI и берем нужные детали. В последний слот положим пока пустой EEPROM. Потом поставим на него прошивку, а пока - не важно. Нажимаем кнопку "Старт" и достаем готовый блок. 3. Готовим прошивку Теперь, когда все готово, мы построили сокровищницу и скрафтили контроллер - осталось самое главное. Программирование EEPROM'а отличается от программирования обычной программы. Потому, что обычно, наши программы выполняются в OpenOS, которая заботливо загружает нужные библиотеки, предоставляет всякие удобные фичи и прочее. Тем не менее писать мы будем именно в OpenOS. Запустим компьютер, напишем edit bios и введем следующие строки: red = component.proxy(component.list("redstone")()) while true do red.setOutput(5, 0) computer.pullSignal(1) red.setOutput(5, 15) computer.pullSignal(1) end Дело в том, что большая часть библиотек, которые мы использовали - это библиотеки OpenOS. А значит мы не можем ими пользоваться в BIOS. Однако кое-что нам доступно. Это библиотеки computer и component, и соответственно все установленные в целевом агрегате (микроконтроллер) компоненты. Более чем достаточно для наших задач. Вышеприведенный код делает следующее: * ищет компонент с названием "redstone" и возвращает его прокси * в вечном цикле посылает нулевой редстоун-импульс направо (side = 5), т.е. гасит сигнал * ждет секунду (на самом деле - ожидает эвентов, то есть сигналов) * посылает редстоун сигнал с силой 15 направо * опять ждет секунду Преследуем двоякую цель: во-первых проверить, что EEPROM вообще работает так про него написано на Вики. Кто его знает? А во-вторых: убедиться, что сторона 5 это именно та сторона, где дверь. А не какая-нибудь другая. Нажмем Ctrl+S, чтобы сохраниться и Ctrl+W, чтобы закрыть редактор. Вставим пустой EEPROM (еще один) в слот нашего компьютера, вместо лежащего там Lua BIOS. И напишем в консоль такую команду: flash -q bios MCBios Программа flash предназначена для прошивки чипов. Флаг -q говорит ей, чтобы не задавала лишних вопросов, затем идет имя файла с нашим кодом (bios) и метка, которую программа шлепнет на чип (MCBios). Все. Доставайте. Lua BIOS на место класть не обязательно, ибо этот слот нам еще потребуется. (Но не забудьте его вернуть, если будете перезагружать компьютер) Чтобы заменить пустой EEPROM в контроллере на наш MCBios, надо положить контроллер и MCBios на верстак. При этом пустой чип вылетит, а новый встанет на его место. Поставим контроллер на пол и протестируем. После клика ПКМ на контроллере - замигала правая лампа. Значит все работает как нужно. 4. Теперь - серьезно Извлеките чип с MCBios обратно (так же как и вставляли, только наоборот). Или приготовьте новый пустой чип. Главное - не запутайтесь в них. Пишем клиент для контроллера. У меня он выглядит примерно так: red = component.proxy(component.list("redstone")()) modem = component.proxy(component.list('modem')()) modem.open(27) red.setOutput(5, 0) red.setOutput(2, 0) -- no explosions yet =) while true do name, _, sender, _, _, message = computer.pullSignal(2) if name == 'modem_message' then if message == 'open' then red.setOutput(5, 15) elseif message == 'close' then red.setOutput(5, 0) else -- hacker tries to get in? red.setOutput(2, 15) -- fire in the hole!!! end end end modem.close() Все согласно плану. Прошиваем чип, вставляем в контроллер, а контроллер ставим слева от дверей. Сзади к контроллеру осторожно прилаживаем запал. ПКМ! Теперь открываем новый файл на компьютере: edit send И пишем в него такой код: local com = require('component') local modem = com.modem local args = {...} modem.broadcast(27, args[1]) print("Message '"..args[1].."' sent!") Сохраняем, и закрываем. Это будет программка для тестирования контроллера. 5. Тест! Пишем в консоль send open. Дверь открылась! Пишем send close. Дверь закрылась! Пишем send opeh Упс! Опечатка. О_О
- 21 комментарий
-
- 13
-
-
-
- eeprom
- контроллер
-
(и ещё 1 )
Теги:
