Перейти к публикации
Форум - ComputerCraft

Поиск по сайту

Результаты поиска по тегам 'OpenComputers'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • TEMP BLOG
  • Робот Байт
  • Fingercomp's Playground
  • DUIIIES ' - блог
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • Another Brick In The Wall
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Создаем собственный сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире майнкрафта, его модификаций и не только
  • Матрица
  • LaineBlog
  • Квантовый блог
  • Велосипедный блог
  • Как Pofigist кодить пытается
  • Блог qwertyMAN'а
  • NullException - DevBlog
  • Гайды для новичков и программы от LuaGamer`a
  • Дача Игоря

Категории и разделы

  • Программирование
    • База знаний
    • Библиотеки
    • Робототехника
    • Сетевые технологии
    • Игры
    • Операционные системы
    • Графика
    • Инфраструктура
    • Программы новичков
    • За пределами Minecraft
    • Всякое-Разное
    • Чулан
    • Стол заказов
    • Конкурсы
  • Игровой раздел
    • Игровые сервера
    • Предложения игроков по улучшению игрового процесса
    • Моды и плагины
    • Гайды, обзоры по модам
    • Жалобы на игроков
    • Заявки на разбан
    • Ивенты
  • Общение
    • Ответы на частые вопросы
    • Вопрос-ответ
    • Вопросник по Lua и модам Opencomputers и ComputerCraft
    • Беседка для программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Новости проекта
    • Предложения по улучшению работы форума и игровых серверов
    • Проблемы в работе игрового сервера, клиента, форума и их решение
    • Дубль аккаунты
    • Обратная связь
    • Архив

Группы продуктов

Нет результатов для отображения.


Искать результаты в...

Искать результаты, содержащие...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

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

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 210 результатов

  1. Представляю вам свою первую более-менее серьезную программу для openComputers. Ее единственная функция - проиграть указанный музыкальный файл. Файл формата nbs, это трекерная музыка с майнкрафтовской спецификой (т.е. написана для музыкальных блоков) Для создания и редактирования файлов в этом формате используется программа Minecraft Note Block Studio, ссылка на тему на майнкрафтфоруме: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1260747-minecraft-note-block-studio Там же можно найти уже готовые музыкальные треки. Большую часть их программа сможет воспроизвести, проблемы будут с треками, содержащими нестандартные музыкальные инструменты и использующие диапазон шире двух октав. Но даже их можно проиграть, предварительно поправив в редакторе, он делает это автоматически. Ссылка на программу: http://pastebin.com/yrtLYBhz Использование очень простое, параметр всего один - относительный путь до файла (с расширением).Да, и помимо собственно компьютера вам понадобятся железные музыкальные блоки из Computronics, подключенные к нему. Штук восемь, можно больше или меньше, если их будет меньше, чем того требует трек, программа помрет, если больше - запас, как говорится, карман не тянет. В планах упаковать программу в библиотечку, сделав возможность включать плеер из других программ. Например, для саундтрека в играх. Еще хотелось бы решить проблему со сбивающимся ритмом, если подскажете способ создавать задержки точнее, чем через pullSignal и os.sleep, буду очень благодарен. Видео работы:
  2. Дело было вечером, делать было нечего... И тут я случайно зажал горячую клавишу калькулятора, и меня осенило! А ведь калькулятора то для ОС никто не писал еще! Так появилась идея создания этого калькулятора. Что можно про него сказать? Базовый калькулятор который умеет выполнять стандартные математические операции. Требования к ОС: Видеокарта 2 уровня и выше Монитор 2 уровня и выше Компьютер/сервер любого уровня с установленной OpenOS Управление самое простое - мышкой. При создании программы была взята статья Псевдографические интерфейсы в OpenComputers и на основе кода из неё был создан калькулятор. Установка: version 0.2 pastebin -get PaVaRGcd Calculator.lua version 0.3 pastebin -get ZjCTrj5a Calculator.lua P.S. Выражаю благодарность @Doob за статью. Если найдете какие-то баги, недочеты, или возникнут идеи по улучшению, я всех с радостью выслушаю.
  3. Ходя по интернету, я не встречал более удобную программу для редактирования воксельных моделей чем MagicaVoxel. Я уже использовал ее для крутых черепах, и теперь она пригодится нам всем и для принтов. Я сделал конвертер для переноса бинарного формата .vox в текстовый. Использование: 1 https://ephtracy.github.io/ Скачайте и установите MagicaVoxel. Сделайте модель своей мечты. Не забудьте следить за размерами в правом верхнем углу - размер одного печатного блока 16х16х16. Можно превысить размеры - конвертер просто сделает список больше чем из одного блока. 2 http://codepen.io/Krutoy242/full/xGOgJG/ Сохраните и откройте модель в моем модном конвертере. Настройки такие же как в принте - название, подсказка, пару флагов и свечение. Так же, после загрузки модели можно будет выбрать текстурки и цвета каждого типа блоков. Флажек "Split to states" разделит вашу модель пополам по оси X что бы из второй части сделать изменение модели при нажатии\подаче редстоун сигнала. Например, для калитки вам нужно в MagicaVoxel задать размер 32 16 16, в одном квадратике нарисовать закрытую калитку, а во втором - открытую. Вот и всё! Полученный текст можно вставить в файлик и отпечатать по гайду Тоторо. Позже добавлю программу, позволяющую печатать по очереди сразу несколько моделей. Конвертер написан на JavaScript. Он читает бинарный файл и объединяет воксели в группы. Программа в какой то степени оптимизирована. Например эти стержни конвертировались автоматически со 100% эффективностью. Но в некоторых случаях, конечно, при создании модели человеком можно будет сэкономить 2-3 шейпа из 23х максимальных. Пишите свои отзывы и пожелания по улучшению конвертера.
  4. Всем привет! В этой теме я расскажу моей программе ---Удалённом рабочем столе на сети OpenNet и моде OpenComputers. Первым делом расскажу как ей пользоваться. Ввод данных: Всё очень просто=) Жмёте на кнопку на клавиатуре, и её нажатие эмитируется на удалённом компьютере. Для обновления экрана --- F5 Для выхода из программы на удалённом компьютере --- F2 Для выхода из программы на локальном компьютере ---F1 Ну....Вроде всё по управлению=) Запуск,настройка и подключение: Подготовка к запуску удалённого терминала: Установить библиотеку thread: local computer = require("computer") computer.SingleThread = computer.pullSignal local thread = {} local mainThread local timeouts local function MultiThread( _timeout ) if coroutine.running()==mainThread then local mintime = _timeout or math.huge local co=next(timeouts) while co do if coroutine.status( co ) == "dead" then timeouts[co],co=nil,next(timeouts,co) else if timeouts[co] < mintime then mintime=timeouts[co] end co=next(timeouts,co) end end if not next(timeouts) then computer.pullSignal=computer.SingleThread computer.pushSignal("AllThreadsDead") end local event={computer.SingleThread(mintime)} local ok, param for co in pairs(timeouts) do ok, param = coroutine.resume( co, table.unpack(event) ) if not ok then timeouts={} error( param ) else timeouts[co] = param or math.huge end end return table.unpack(event) else return coroutine.yield( _timeout ) end end function thread.init() mainThread=coroutine.running() timeouts={} end function thread.create(f,...) computer.pullSignal=MultiThread local co=coroutine.create(f) timeouts[co]=math.huge local ok, param = coroutine.resume( co, ... ) if not ok then timeouts={} error( param ) else timeouts[co] = param or '' end return co end function thread.kill(co) timeouts[co]=nil end function thread.killAll() timeouts={} computer.pullSignal=computer.SingleThread end function thread.waitForAll() repeat until MultiThread()=="AllThreadsDead" end ------------------------------------------------------------------------------- return thread (Только на сервер,на клиенте она не нужна) Установить OpenNet и находится в зоне его покрытия. Установить на сервер его часть: local event= require("event") local thread= require("thread") local opennet= require("opennet") local computer= require("computer") local gpu= require("component").gpu local unicode= require("unicode") local keyboard= require("component").keyboard.address local IP, dis2serv = opennet.getIP() print("Local IP: "..IP) args={...} if args[1]==nil then print("Использование: openviewerS <opennet_ip>") os.exit() end --[[ _, result, reason = opennet.sendrec(args[1], "connecting...") if result==false then print(reason); os.exit() end if args[1]==IP then print("Невозможно инициализировать удалённый доступ со своим устройством.") os.exit() end ]]-- initial=args[1] local function getScreen() screen="" for y=1, 25 do for x=1, 80 do symbol = gpu.get(x, y) screen=screen..symbol end end return screen end local function sendScreen() opennet.send(initial, getScreen()) end function runShell() os.execute("sh") end function reInitial() thread.killAll() thread.init() thread.create(runShell) thread.create(EmulateSignal) thread.waitForAll() end event.listen("Screen", sendScreen) event.listen("Exit", reInitial) function EmulateSignal() while true do opennetIP, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 = opennet.receive() if opennetIP==initial then computer.pushSignal(arg1, keyboard, tonumber(arg3), tonumber(arg4), arg5) end end end thread.init() thread.create(runShell) thread.create(EmulateSignal) thread.waitForAll() Установить на клиент клиентскую часть: local opennet= require("opennet") local term= require("term") local unicode= require("unicode") local event= require("event") args={...} if args[1]==nil then print("Использование: openviewerC <opennet_ip>") os.exit() end initial=args[1] function getScreen() repeat ip, screenRaw=opennet.receive() until ip==initial for sym=1, #screenRaw-160 do io.write(unicode.sub(screenRaw, sym, sym)) end end term.clear() opennet.send(initial, "Screen") getScreen() while true do arg1, arg2, arg3, arg4, arg5 = event.pull() if arg1=="key_down" and arg3==0 and arg4==63 then term.clear() opennet.send(initial, "Screen") getScreen() elseif arg1=="key_down" and arg3==0 and arg4==59 then os.exit() elseif arg1=="key_down" and arg3==0 and arg4==60 then opennet.send(initial, "Exit") else opennet.send(initial, arg1, arg2, arg3, arg4, arg5) end end Для запуска программы надо написать на сервере: openviewerS <IP Адрес клиента> ВНИМАНИЕ!!! Надо ввести именно IP, а не DNS; Единственное поддерживаемое разрешение - 80x25 На клиенте же пишем: openviewerC <IP Адрес сервера> Вот и всё=) Надеюсь,эта программа вам будет полезна ! Неплохо было-бы попасть в вайт-лист
  5. Как извлечь дискету программой на дискете из того дисковода, в который она была вставлена игроком?
  6. Представляю Вашему вниманию RedOS, ОСь предназначенную для первоуровневых компьютеров. Версия 1.1 Особенности: 1. Интуитивный и минималистичный интерфейс 2. Возможность копировать, удалять и переименовывать файлы и папки 3. Установка через дискету* 4. Буферизация графики 5. Низкие системные требования Интерфейс очень простой и понятный, снизу рабочая папка и страница, слева - названия файлов и папок, в центре - тип, справа - размер. Очень удобный курсор, который сразу дает понять, где и с чем именно ТЫ будешь работать, также есть защита в случае, если случайно нажмете на удаление или еще чего) Расширенный набор функций удовлетворит любого пользователя MAC своими возможностями Поддержка установки как через Pastebin, так и через дискету Гайд по созданию установочной дискеты: 1. Установить ОС через pastebin 2. Вставить дискету 3. Скопировать все из "/ISO" на дискету 4. Использовать ее как установочную для Бабушкиного ведра)) И наконец, системные требования: Жесткий диск : 40 Кбайт для версии с дискеты и 88 для версии с Pastebin Видеокарта: должна присутствовать Процессор: смотри на видеокарту Оперативная память: 256 Кбайт Дополнительная периферия: Дисковод или Интернет карта, монитор, клавиатура, bios Установка производится после установки OpenComputers Ссылка на скачивание через Pastebin: XRGVrufj Просто напишите в консоли pastebin run XRGVrufj)) Ссылка на исходники на Github
  7. Многие игроки здесь видели или хотя бы слышали про огромный дронодом, который построил @Asior в былые времена на сервере RoboCraft. С тем чтобы прояснить происхождение этой хаты и оставить о ней заметку в этом клубе, специально для «Новостей подполья» @Fingercomp обратился к создателю постройки и попросил рассказать про неё. Редакция представляет обработанную версию истории. История начинается в начале мая 2016 года, когда запустился сервер RoboCraft, на который сразу же хлынули толпы игроков, хотевшие «поскорее стать топовыми игроками, обладателями гор ресурсов и, конечно же, новых идей и программ». Туда попал и герой нашего рассказа. Развитие было довольно сложным. «Поначалу я хотел, как обычно, отстроить бункер и спокойно, потихоньку наращивать силы», но этому воспрепятствовал случай: система автоматического расселения игроков закинула Asior невесть куда — в середину заражённого биома. Очевидно, что герой этому не обрадовался. Ему потому пришлось бегать в поисках нового места. Конечно, Asior таки организовал себе временное убежище и начал стремительное развитие в игре. Но в чате игроки часто оставляли ссылочки на скриншоты своих невероятно красивых палат с невероятно крутых ракурсов. Он перерыл огромное число чертежей домов, замков, статуй — и решил построить дрона. Дрона из OpenComputers. Ведь сервер специально разрабатывался для этого мода. Asior зашёл в сингл и долго, упорно воздвигал новые варианты постройки и безжалостно крушил старые. Наконец, он определился с тем, как именно должно будет выглядеть его будущее жилище. Оставалось лишь воспроизвести это всё на сервере. Но здесь и возникла основная проблема: как добыть такое огромное количество ресурсов для строительства? Разрешена она была путём не самым чистым: Впрочем, и того, что он раздобыл, сполна хватило на постройку основного корпуса дрона. Это потребовало огромного числа строительных лесов и невероятных акробатических способностей и дополнительно осложнялось тем фактом, что полученные вечные блоки не перемещались из хотбара. Но стиснув зубы и получая подкормку от щедрых игроков Asior таки построил дрона. Потому пришлось придумать, как расширить жилище. Некоторые предлагали соорудить какое-нибудь здание, к которому был бы «привязан» дрон, но, увы, это не вписывалось в местность. Далее настала очередь внутренней отделки: ставились перегородки, размещалось оборудование. А монументальное сооружение, памятник роботу и дрону, стал пользовался большой популярностью, чему создатель не противился: «я был не против, чтобы все желающие посмотрели, как я живу, уточнили какие-то вопросы или помогли чем-нибудь». С тех пор сервер RoboCraft давно закрыт, но память о роботе и дроне жива до сих пор. Редакция присоединяется к пожеланию героя остроить то, что поражало бы воображение и отпечаталось в приятных воспоминаниях десятков игроков. И мы всё так же мы призываем вас оформить подписку на «Новости подполья». Годноты здесь много было, есть — а то ли ещё будет.
  8. Я написал две небольшие программы, одна из которых передаёт эвенты нажатий кнопок клавиатуры. Вторая же, наоборот принимает. Вот они: https://pastebin.com/S9iwvvSn https://pastebin.com/qTPHTByk Настройки всего две: port = 23 Порт для связи двух компьютеров. stelsMode = false Невидимый режим. Есть только на принимающем демоне. Полезен когда на компе вашего друга стоит эта прога в автозапуске и ему срочно потребовался комп и его сетевая карта по отдельности. В этот момент программа может написать (если стоит false): "ЧО С СЕТЕВОЙ КАРТОЙ?! Я ЧОТО НЕ ПОНЯЛ ВЕРНИ ОБРАТНО" "У тебя нету сетевой карты. Демон не сможет принимать сообщения!" и спалит контору. Ну, на этом все. Надеюсь Вы не будете бросать в меня тапками и помидорами. Все-же это мой первый пост.
  9. Автокрафт на роботе. Программа не имет GUI. Всё управление осуществляется через командную строку. Для работы вам потребуется робот и сундук. Сундук должен стоять перед роботом. Робот должен иметь следующие улучшения: Улучшение «Контроллер инвентаря» Улучшение «Инвентарь» Улучшение «Создание» Улучшение «База данных (1-ый уровень)» Процессор уровня 2 и выше. Необходимый объём памяти и жёсткого диска зависит от количества предметов в сундуке и сложности рецепта. При тестировании использовался робот со следующими характеристиками: см. скриншот. Базу данных программа сохраняет в текущем каталоге. Поэтому для работы программы нужно создать отдельный каталог. Недостатки. Предварительный подсчёт достаточности ресурсов для выполнения сложного крафта не выполняется. Планируется исправить в будущих версиях. Инструкция с картинками. Man Скачать Версия 0.10.8 Старая версия
  10. Здрассьте, господа, у нас тут превесёлая вещь случилась: спустя полгода разработки (причём круглым числом; 28 мая стартанули) у нас отрелизился репозиторий! Обозвали мы его Hel. В репозитории мы собрали и воплотили в жизнь все хорошие идеи и концепции, которые обсуждались здесь, чтобы получился максимально кавайный способ дистрибуции пакетов. Пользоваться репозиторием не сложнее, чем ставить программы с Pastebin. Для этого нужно знать только название пакета. Одна команда: $ hpm install <нужный пакет> И вуаля! Он уже установлен в нужную папку, все нужные библиотеки загружены и распиханы по системе. Можно запускать и работать. Но по сравнению с OPPM или Pastebin, hel несравненно удобнее. Он легковесный. Простой. Не требует регистрации. И СМС. Чем мы гордимся, безусловно. Установка программ производится с помощью одного легкого клиента (как у Pastebin), но в то же самое время, вам не нужно волноваться о библиотеках или версиях программы. Вы всегда можете найти и установить самую свежую версию (и даже не самую свежую), зная только название пакета (как в OPPM). Кстати, раз уж мы заговорили про OPPM. У нас клиент получился настолько охренительным, что вы можете теперь выкинуть oppm в помойку, наконец-то! В стандартный комплект поставки включён oppm-модуль с кэшированием (иными словами, вам не нужно будет ждать пару минут, пока пробрутфорсятся репозитории, сразу всё качается). Всё быстро, чётко, ясно. Юзается оно так: $ hpm oppm:install <имя пакета> Об остальных фичах читайте уже в мануале hpm, там всё есть.
  11. И было это в стародавние темные времена. Когда Программисты были слабы как дети, Инженеры сильны в растеневодстве и умели работать с реакторами, но Воины были сильнее всех. И появился страшный воин, что сметал всех на своем пути, который жил ради одной великой цели - Священной Цитадели! Страшные были времена, когда все в ужасе шарахались от каждой тени, боясь, что там прячется их погибель. И начали игроки строить бункеры и крепости, чтобы хоть как-то защитить свои жизни. Сложнее всего было Программистам, они не могли ни вырастить себе еды, ни запустить реактор, чтобы обеспечить себя энергией. И тогда однажды, темной ночью, в огромном бункере был построен огромный реактор, который получил название "Сердце Стива". Как гласят предания и древние свитки, данный реактор был построен сумашедшим профессором игроком @@electronic_steve. Согласно чертежам "Сердце Стива" это огромный геотермальный реактор, который питается разным хламом и вырабатывает немерянные гигаваты энергии... Сегодня я раскрою завесу тайны и раскажу вам о том, как построить огромный геотермальный реактор, который будет стабильно вырабатывать 440 eu/t Особенность данного реактора - он вообще не требует урана для своей работы. В качестве топлива используется разный хлам, от булыжника до листьев. Взорвать данный реактор не выйдет ни при каких обстоятельствах. И, что самое интересное, данный реактор без программирования не запустить. Внимание! Данный реактор не рекомендуется к постройке на серверах, в связи с тем, что при его работе довольно сильно нагружается сервер, возможны лаги, резкая просадка фпс и прочие неприятности, вплоть до регенерации региона где стоит данная установка. Данную схему разрешается использовать для проверки своего уровня знания в программировании (а запустить его ох как непросто), а также топовым игрокам, которым уже реально нечем заняться. Официально заявляю, что данная постройка была разработана не мной, а игроком @@electronic_steve, я лишь немного доработал конструкцию и выкладываю сюда. Ну что-же приступим к подготовке строительства реактора. Для начала проверим наличие модов, необходимое для постройки реактора: OpenComputers - мод добавляющий компьютеры и прикладное оборудование для него IndustrialCraft / Mekanism - технический мод, из него будем брать геотермальные генераторы GanysNether - из него возьмем только вулканическую печь Все есть? Тогда готовим МНОГО ресурсов, а именно: IC2/Mex геотермальный генератор - 22 шт IC2/Mex провода высоковольтные ~ 64 шт GanysNether вулканическая печка - 4 шт ОС провода ~ 48 шт ОС транспозеры - 7 шт ОС компьютер Т2 - 1 шт ОС монитор Т2 - 1 шт ОС клавиатура - 1 шт ОС преобразователь энергии - 1 шт По желанию: ОС робот - 1 шт ОС батареи ~ 5 шт ОС зарядка - 1 шт Готовы? Тогда начинаем размечать территорию. Размеры реактора составляют 9х9х6. Заранее предупреждаю, высоту я на 1 блок слегка увеличил, чтобы можно было хоть как-то подлезть под реактор. Дальше все просто, расставляем ОС провода по центру, а так-же поднимаем их вверх на 3 метра. По центру ставим транспозер. Транспозер окружаем по кругу вулканическими печками. Этот транспозер у нас будет распределять мусор по вулканическим печам. Навешиваем, как в продолжение вулканической печи, еще 4 транспозера - они будут выкачивать лаву из вулканических печей и передавать на генераторы. Собственно, на установленные транспозеры лепим генераторы, если у них есть точки выхода энергии, то ими наружу. Получится такой вот ежик с 16 генераторами, но на этом реактор еще не построен. Снизу выбираем любую вулканическую печь и навешиваем на неё транспозер с генераторами. Тоже самое делаем зеркально с другой стороны. Таким образом вы должны навесить 6 генераторов. ВНИМАНИЕ! Вешать генераторы только снизу! Между генераторами заталкиваем 2 ОС батарейки, они нам нужны для автономной работы генератора, пока он будет в отключке. Сверху, в свободные выемки между генераторами запихиваем батарейки, их там 3 штуки влезет. Устанавливаем сундук, в который будет идти всякий хлам, робота и собственно компьютер. Я рекомендую комплектацию оборудования как на скрине, но если есть желание, можете добавить что-то еще. Теперь вооружаемся проводами и лесами, начинаем опутывать весь наш реактор проводами. Собственно не мне вас учить, как правильно и компактно проложить провода, но если кто не понял глядите на картинку, что снизу или на первую. Ну и финальный этап - запуск компьютера для проверки работы транспозеров. Запрашиваем систему о наличии транспозеров, должно отобразиться 7 штук. Собственно на этом постройка великого реактора на транспозерах завершена, теперь можно со спокойной совестью начинать запускать его. Алгоритм работы реактора прост: 1. Транспозер распределитель берет мусор из сундука сверху и по очереди раздает его в 4 вулканических печи 2. Вулканическая печь перерабатывают мусор в лаву 3. Боковые и нижние транспозеры забирают лаву из вулканической печи и распределяют её по генераторам 4. Генераторы преобразуют лаву в энергию и выбрасывают её на провода и так по кругу. При помощи робота можно автоматизировать процесс крафта разного хлама, что лучше всего крафтить увы незнаю, во времена когда данный реактор появился, его питали каменными пулями, так как они крафтились сразу по 32 штуки с 1 булыжника. Сейчас - все на ваш выбор. Реактор успешно был построен, теперь остается только написать ПО для него и можно спокойно генерировать энергии не опасаясь, что он рванет, закончится уран или еще что-то. А на этом я с вами прощаюсь. Поведал вам столь необычную схему @@Asior, от всей души благодарю проект http://computercraft.ru а также людей, что принимали участие в постройке "Сердце Стива", всячески подсказывали, объясняли, рассказывали и т.д.: @@Fingercomp, @@electronic_steve @@qwertyMAN @@Asummonster Ну и конечно же админа @@Alex, за то, что забыл отключить крафт вулканической печки. Всем удачи, надеюсь вы сможете запустить данный реактор без каких-либо проблем, а я пойду выкину ненужный теперь радий и наконец то медведя запущу, погреться у теплого реактора... P.S. Надеюсь все, кто заметил отсылки к себе, во вступительном слове данной статьи не будут держать на меня зла, надо же было как-то привлечь внимание целевой аудитории. P.S.S. Да программы нет, моя цель была только показать какую дичь раньше строили, а запускать это, уже вам.
  12. Привет всем! Я новичок в OpenComputers поэтому почитав вики я решил накодить свою 1ую простенькую прогу. Программу назвал MineInfo Данная программа признана для того чтобы выводить информацию о компьютере. На самом деле эта программа не нуждается в обьяснениях. Все очень понятно эта программа работает на local computer = require("computer") Первая строчка - Время работы (в секундах) Вторая строчка - Максимум энергии которая может хранить сеть (к которой подключен компьютер) Третья строчка - Всего памяти в компьютере Четвертая строчка - Свободная память в компьютере Как же установить эту программу Особенно эта команда подойдет для новичков которые не знают как качать проги с пастебина))) ВНИМАНИЕ! В компе должна быть интернет карта!!! Вот команда: pastebin get -f XTRtYUab /bin/info Потом просто пишем info и получаем информацию о системе) Примечание: Если вы хотите поменять команду info на другую переходим в директорию bin и пишем mv -f info {здесь пишем нужную команду}
  13. Тут принимаются идеи, баги, помощь. Будут новости. github: https://github.com/Avaja/OpenTechnology
  14. Totoro

    3D-Принтер

    Трехмерная печать в Minecraft (инструкции для самых маленьких) Начиная с версии 1.5.4, в OpenComputers появляется интересный девайс - трехмерный принтер. Он дает возможность печатать декоративные блоки любой формы и цвета. Причем не только статичные блоки, но и двери/люки, кнопки и рычаги! Давайте рассмотрим, для чего он может пригодиться, и как именно с ним работать. 1. Цель Как и в предыдущих гайдах, первым делом поставим себе цель. Мы будем создавать стенную плитку со сквозным орнаментом, в виде морды крипера. Я не буду приводить в этом гайде рецепты предметов, так как их легко найти в NEI, или в статьях на gamepedia. 2. Обзор принтера 3D-принтер - это периферическое устройство, которое должно быть подключено к работающему компьютеру. Оно представляет собой блок, с двумя внутренними слотами: Верхний слот предназначен для специальной печатной массы (изготовляется из редстоуна, гравия, древесного угля и воды). Принтер вмещает два стека печатной массы (256 000 ед). Нижний слот занимает картридж с красителями. Объем внутреннего хранилища - два картриджа краски (100 000 ед). По команде от компьютера, принтер берет немного печатной массы и краски и "распечатывает" в крайний правый слот запрограммированную модель. На модель из этого гайда, состоящую из 21 фигуры, принтер потратил 424 единицы массы и 314 единиц краски. 3. Отпечатанный блок Модель для печати задается в виде списка "фигур" - параллелепипедов. Каждая фигура отмечена координатами противоположных углов. Она имеет свою текстуру, цвет оттенка (если необходимо) а также состояние (true/false). Максимальное количество фигур в модели - 24, по умолчанию. Координаты блока тремя числами (X, Y, Z) в пределах от 0 до 16. Блок может переключать свое состояние, когда игрок кликает по нему правой кнопкой мыши, или на блок подается сигнал редстоуна. По умолчанию блок имеет форму, заданную блоками с состоянием false, и сменяет ее на форму из блоков с состоянием true, при активации. Кроме того блок имеет несколько дополнительных общих флагов, которые определяют его название, описание и некоторые другие параметры. 4. Программирование принтера Есть два способа распечатать свою модель. Через компонент принтера и прямое управление, либо при помощи стардартной программки print3d от Сангара. 4.1 Компонент принтера Подключение принтера ничем не отличается от подключения любого другого устройства: local com = require('component')local printer = com.printer3d Компонент предоставляет набор функций для управления: reset() - сброс настроек и остановка печати setLabel(value:string) - задаем название будущего блока getLabel():string - получаем текущее название setTooltip(value:string) - задаем описание блока getTooltip():string - получаем описание setRedstoneEmitter(value:boolean) - определяет, излучает ли блок сигнал редстоуна в активированном состоянии isRedstoneEmitter():boolean - возвращает true, если блок излучает сигнал в активном состоянии setButtonMode(value:boolean) - определяем поведение блока при активации. Если true, то блок автоматически возвращается в неактивное состояние через несколько секунд после активации (как кнопка) isButtonMode():boolean - возвращает true, если блок находится в режиме "кнопки" addShape(minX:number, minY:number, minZ:number, maxX:number, maxY:number, maxZ:number, texture:string[, state:boolean=false][,tint:number]) - добавляет новую "фигуру" к форме блока. Фигура задана координатами. texture - название текстуры, state - для какого состояния фигура предназначена, tint - цвет оттенка фигуры getShapeCount():number - возвращает количество фигур в модели getMaxShapeCount():number - возвращает максимально возможное количество фигур commit([count:number]) - посылает принтеру текущую конфигурацию и начинает печать (count - количество копий, если не задано - равно 1) status(): string, number or boolean - возвращает состояние принтера - "buzy" и процент готовности, или "idle" и готовность предмета (true/false). 4.2 Программа print3d Код программы не включен в мод по умолчанию, поэтому его надо скачать из интернета. Последнюю версию можно найти на ГитХабе автора: https://github.com/OpenPrograms/Sangar-Programs/blob/master/print3d.lua Либо скачать с Pastebin: http://pastebin.com/b5rD8KcY (поставьте интернет-плату, и наберите в консоли компьютера команду pastebin get b5rD8KcY print3d) Эта программа по сути, читает параметры модели из текстового файла и передает принтеру. Формат вызова программы: print3d FILE [count] Где FILE - название файла с моделью, а необязательный параметр count - количество копий модели. Модели имеют простой формат - все параметры записываются в таблицу, по аналогии с Луа. Вот образец файла с моделью. { -- Это - название модели. Т.е. название будущего блока, которое будет видно -- в инвентаре и подсказке Waila. Название по умолчанию - "3D Print" label = "Example Model", -- Это описание предмета, такое, как будет видно в инвентаре. Если не задано, -- предмет не будет иметь описания tooltip = "Это демонстрационная модель, показывающая все возможности", emitRedstone = false, --[[ Если этот параметр равен false, блок работает как дверь, сменяя свое состояние при сигнале редстоуна. Если параметр равен true, блок работает как кнопка или рычаг - излучая сигнал при смене состояния. При этом блок не реагирует на сторонний сигнал. По умолчанию параметр равен false. ]] buttonMode = false, --[[ Если этот параметр равен false, модель работает как дверь или рычаг - то есть остается в том состоянии, в которое установлен игроком. Если параметр равен true, модель автоматически возвращается в неактивное состояние через несколько секунд после активации. По умолчанию параметр равен false. ]] -- Это список фигур модели, которые определяют, как она выглядит. -- Модель должна содержать как минимум одну фигуру (параллелепипед) -- в неактивном состоянии. -- Фигуры не могут быть "плоскими" т.е. не иметь объема. -- Каждая фигура задана шестью числами: minX, minY, minZ, maxX, maxY, maxZ. -- (Координаты двух противоположных углов.) -- Если смотреть спереди, ось X направлена вправо, ось Y - вверх и ось Z - вглубь. -- Дополнительно, каждая фигура длолжна обладать текстурой. Для того чтобы -- определить название текстуры, вы можете воспользоваться Определителем Текстуры -- (Texture Picker), кликнув им по нужному блоку. -- -- Модель имеет два состояния - неактивное (false, состояние по-умолчанию) -- и активное (true, состояние после активации блока). shapes = { -- Фигура идет от точки <0, 0, 0> (левый нижний угол) до <8, 8, 8> (середина), -- и имеет текстуру блока лазурита. { 0, 0, 0, 8, 8, 8, texture = "lapis_block" }, -- Фигура идет из точки <8, 8, 8> (середина) в <16, 16, 16> (правый верхний угол), -- и закрашена текстурой дубовой листвы. Фигура принадлежит активному состоянию -- модели и имеет светло-зеленый оттенок. { 8, 8, 8, 16, 16, 16, texture = "leaves_oak", state = true, tint = 0x48B518 } }} Т.е. описание модели просто содержит перечень всех тех параметров, которые задаются при помощи компонента, и список фигур из которых модель состоит. Набор тестовых моделей для изучения, можно найти здесь: https://github.com/OpenPrograms/Sangar-Programs/tree/master/models 5. Проектирование модели Разобьем мысленно рисунок запланированной модели на параллелепипеды. Она будет представлять собой тонкую плитку посередине блока, наподобие стекла или решетки. Руководствуясь сеткой координат и образцом выше, составим описание модели для текстового файла: { label = "Плитка 'Морда крипера'", emitRedstone = true, buttonMode = false, tooltip = "Секретный рычаг в виде головы крипера" shapes={ {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200}, {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,8, 14,14,9, texture="quartz_block_side", tint=0xe0301e, state=true}}} Итак, наша плитка имеет двойной набор фигур - для двух состояний, окрашенных в текстуру кварца с зеленым оттенком. Кнопка будет работать как рычаг, испуская сигнал в активном состоянии. Откройте файл командой open creeper. Скопируйте код плитки выше и вставьте в файл кнопкой [insert]. Затем сохраните ([Ctrl]+) и покиньте редактор ([Ctrl]+[W]). 6. Печать Все готово, принтер заправлен, модель спроектирована. Отправляем ее на печать! print3d creeper 7. Итоги Enjoy!
  15. Я предлагаю запилить экспериментальный проект. Кодовое название - "Цитадель". Кавайная заставочка - сверху. Суть вкратце такова. Необходимо полностью развиться в Minecraft, с нуля, используя ТОЛЬКО роботов и дронов из OpenComputers. Делать что либо руками запрещается. (Если кто-то читает мою группу в ВК, там мелькал пост одного чувака, который снимает серию летсплеев с похожей идеей.) Для проекта берём сервер в сингле (например). Ставим несложную сборку - например Minecraft 1.12 + OpenComputers 1.7 + какой-нибудь тех. мод с хорошей OC-интеграцией, например - Mekanism. Далее генерим мир. Игрок будет обитать на спавне - в стартовой базе. У него в наличии будет: * закрытый ангар, в котором он живёт (выходить из него игроку нельзя), * вечный источник энергии, * компьютер третьего тира с беспроводной картой и интернет-платой, * пять доков с роботами (док - это ячейка с зарядником и люком наружу, где стоит робот), * пять доков с дронами, * небольшой запас провизии на первое время. Конфигурация дронов и роботов - тир три, с вайфай-картами и чанклодерами. На компы и роботов установлена OpenOS последней версии. Дроны прошиты нет-флашем. Основные задачи проекта: * наладить поставку провизии игроку * наладить добычу и хранение важных ресурсов * развернуть репликацию роботов и дронов Условие поражения: * потеряны все роботы и не выполнены основные задачи Сюжетный обоснуй: Игрок не совсем удачно десантировался с орбиты. У него мало ресурсов, но сохранился рабочий комплект робототехники и ядерный энергогенератор с ресурсом в тысячу лет бесперебойной работы. Атмосфера планеты непригодна для жизни человека. Что думаете по поводу идеи? Какие моды должны войти в состав сборки? Какие технические препятствия видите? Какие поправки стоит внести в стартовые условия? Какие действия по вашему стоит предпринять игроку первым делом?
  16. На днях в чате прозвучал вопрос, как убрать чёрные полосы по краям экрана. На форуме есть замечательная библиотека от @ECS, которая хорошо решает поставленную задачу: http://computercraft.ru/topic/1130-avtomaticheskii-mssahtab-monitora-izbavliaemsia/ Но есть два нюанса: 1) Код библиотеки явно избыточен. 2) При чтении кода библиотеки создаётся впечатление, что она работает на неведомой магии тёмных сил, что демотивирует новичков, изучающих OpenComputers. Я намерен восполнить данный недостаток. Прочтение этого гайда поможет любому желающему написать кусочек кода под нужды конкретной программы, не подтягивая библиотечный код. Благодарю @Totoro за предоставленную информацию: 1) Текстура блока имеет размер 16 px, а ширина рамки монитора – 2 px; 2) Высота символа на экране в два раза больше его ширины. Данной информации достаточно для получения всех необходимых формул. Приступим: Первый шаг: получить соотношение сторон экрана, выраженное в символах В мире Майнкрафта текстура блока имеет размер в 16 пикселей. На рамку с каждой стороны тратится по 2 пикселя независимо от размера монитора. Очевидно, что размер монитора в пикселях кратен 16 и пропорционален количеству использованных блоков, а размер полезной части экрана всегда меньше размера монитора на 4 пикселя как по вертикали, так и по горизонтали. Поэтому разрешение нескольких мониторов, выставленных в ряд, всегда составит 16*n-4 пикселей по соответствующей координатной оси. Это подтверждает и формула от @ECS, реализованная в функции calculateAspect(screens), но имеющая более сложный вид. Я предлагаю и вовсе отказаться от отдельной функции, т. к. в текущих условиях это будет напрасной тратой ресурсов. Немного поясняющего кода: -- размер монитора в блоках sw,sh = component.screen.getAspectRatio() -- размер экрана монитора с учётом затрат на рамку: sw_ = sw*16-4 sh_ = sh*16-4 -- соотношение сторон экрана, выраженное в пикселях текстуры блока sa = sw_/sh_ -- соотношение сторон экрана, выраженное в символах sa = 2*sw_/sh_ -- оно же без промежуточных присваиваний: sa = 2*(sw*16-4)/(sh*16-4) -- оно же после упрощения формулы и сокращения количества операций sa = (sw*2-0.5)/(sh-0.25) Второй шаг: скорректировать разрешение графической карты под соотношение сторон экрана Теперь требуется получить максимально доступное разрешение GPU и соответствующее ему соотношение сторон: -- максимально возможное разрешение графической карты в символах gw, gh = gpu.maxResolution() -- соотношение сторон при максимальном разрешении в символах ga = gw/gh -- формулы, полученные из предыдущей, и которые пригодятся чуть позже gw = gh*ga gh = gw/ga Для определения дальнейших действий следует вспомнить о физическом смысле соотношения сторон. Исходя из приведённых выше формул, sa и ga можно назвать коэффициентами горизонтальности. Сравнивая их, можно определить, что по горизонтали более вытянуто разрешение либо видеокарты, либо монитора. Понятно, что если монитор имеет больший коэффициент горизонтальности, то для приведения к нему коэффициента горизонтальности видеокарты следует уменьшить её разрешение по вертикали. В ином случае следует уменьшать разрешение GPU по горизонтали: -- код в понятной форме, использованы формулы из предыдущего фрагмента if sa>ga then -- недостаточная горизонтальность GPU ga=sa -- привести горизонтальность в соответствии с экраном gh = gw/ga -- за счёт уменьшения высоты else -- избыточная горизонтальность GPU ga=sa -- привести горизонтальность в соответствии с экраном gw = gh*ga -- за счёт уменьшения ширины end -- код после сокращения лишних операций if sa > gw/gh then gh = gw/sa else gw = gh*sa end Третий шаг: скорректировать разрешение графической карты под нужны программы Вычисленное на предыдущем шаге разрешение может оказаться дробным, и перед использованием его следует округлить. Возможно, что перед этим разрешение должно быть приведено к желаемому масштабу, как это сделано в библиотеке @ECS. Эта часть, скорее всего, не требует пояснений, и готовый код будет, например, таким: -- код для автоматической подстройки разрешения графической карты под размер монитора -- почти не оставляет чёрных полос по краям экрана -- полное исключение полос возможно только при отсутствии округления разрешения local component = require"component" local gpu, screen = component.gpu, component.screen function set_proportional_resolution( scale ) -- коррекция допустимых пределов масштаба if not scale or scale > 1 then scale = 1 elseif scale < 0.1 then scale = 0.1 end -- соотношение сторон монитора в символах: local sw,sh = screen.getAspectRatio() local sa = (sw*2-0.5)/(sh-0.25) -- запрос и коррекция максимального разрешения GPU local gw, gh = gpu.maxResolution() if sa > gw/gh then gh = gw/sa else gw = gh*sa end -- установка нового разрешения GPU с учётом заданного масштаба gpu.setResolution( math.floor(gw*scale), math.floor(gh*scale) ) end -- тест работоспособности на нескольких вариантах масштаба -- в процессе можно видеть, что на некоторых масштабах чёрные полосы имеют больший размер, чем на других local w,h local unicode = require"unicode" for i=0.1, 1, 0.1 do set_proportional_resolution(i) w,h = gpu.getResolution() gpu.fill(1,1,w,h, unicode.char(0x2592)) os.sleep(2) endПриведённый код можно сократить ещё сильнее, например, избавившись от масштабирования, которое может отвлекать читателя от подгонки соотношения сторон. Полное исключение чёрных полос При выполнении этого кода можно видеть, что чёрные полосы не исчезают полностью, и на одних масштабах проявляются сильнее, чем на других. Предположим, требуется полностью избавиться от чёрных полос. Можно было бы написать код и для этого случая, но эта задача не всегда решаема. Кроме того, количество решений сильно ограничено, и не любой интерфейс можно будет подогнать под найденные решения. Пример №1: Монитор максимального допустимого размера 8x6; GPU Tier3 обеспечивает максимальное разрешение 160x50. Условное разрешение монитора в целых символах: sw = 8*8-2 = 62 sh = 6*4-1 = 23 Допустимые разрешения GPU, которые обеспечат отсутствие полос: 62x23 и 124x46. Пример №2: Монитор 6x5; GPU Tier1 обеспечивает максимальное разрешение 50x16. Условное разрешение монитора в целых символах: sw = 6*8-2 = 46 sh = 5*4-1 = 19 Нет разрешений GPU, обеспечивающих полное отсутствие полос. Пример №3: Монитор 5x5; GPU Tier1 обеспечивает максимальное разрешение 50x16. Условное разрешение монитора в целых символах: sw = 5*8-2 = 38 sh = 5*4-1 = 19 Разрешения GPU 50x16 недостаточно для размещения поля символов 38x19. Но если присмотреться внимательно, и вспомнить, что нам важно соотношение, то поле символов можно сократить до 2x1, избавившись от общего делителя 19. В этом случае допустимых разрешений GPU предостаточно, начиная от 2x1 и заканчивая 32x16. Во всех этих случаях пустых чёрных полос на мониторе не будет. Автоматизация этих вычислений вряд ли целесообразна. Скорее всего, имеет смысл примерно прикинуть необходимое разрешение для конкретного интерфейса, выбрать желаемый размер экрана, графическую плату, и выполнив приведённые выше вычисления, уже окончательно определить рабочее разрешение и затем подогнать интерфейс под него. Вот, и вся магия. То, что выглядит сложным, не всегда является таковым на самом деле.
  17. Привет всем механикам-технологам, и просто мимопроходящим. В этой небольшой статье я расскажу вам обо всех возможностях такого замечательного мода OpenTechnology. OpenTechnology является аддоном к всеми любимому моду OpenComputers. Автор мода известен как NEO. Тут Ссылка вы можете ознакомиться с его блогом, где он выкладывал обновления своего мода, делился мыслями и т.д. Данный аддон добавляет в игру некоторые новые структуры, предметы и блоки, которые сделают вашу игру более комфортной и расширят возможности роботов. Заранее предупреждаю, дистанция, сила атаки и расход энергии могут быть изменены в конфигурации мода. В этом обзоре я использую базовые настройки, которые идут с модом. Итак, коль упомянул роботов, начнем пожалуй с них. Довольно часто роботы сбегают от игроков и потом начинаются мученические поиски беглеца. Но OpenTechnology может вам помочь в поисках беглецов при помощи "Сканера роботов" :/. Он сканирует пространство радиусом в 40 метров и выводит в чат координаты беглеца. Выглядит это чудо продвинутых технологий, как собственно сканер, экран, маленькая клавиатура и полоса уровня заряда. Заряжается он в любом энергохранилище, если такового нету, можно затолкать в зарядник и он там зарядится. Тесла Апгрейд - оружие массового поражение для робота. Наносит сильный электрический разряд (10 урона) всем мобам окружающих робота в радиусе 10 метров. Урон распределяется равномерно между всеми мобами. После каждого разряда катушка уходит в долгий цикл перезарядки. Будьте бдительны, расход энергии на вспышку очень высок. Технический уровень апгрейда Т3. Поддерживает следующие методы: tesla --название апгрейда attack() --атакует всех сущностей равномерно распределяя между ними урон. После вспышки перегревается checkOverHeated() --возвращает состояние катушки перегрелась или нет getMaxRadius() --возвращает максимальный радиус атаки. getDamage() --возвращает силу урона. Он распределяется равномерно, пример: допустим наш урон 20, --если при атаке в зоне поражения находяться 5 сущностей, каждый получит 4 урона. getCoolingTicks()--возращает количество тиков требуемое для охлаждения катушки. Радар Апгрейд и Антенна радара :/ - приборы позволяющие узнать точное местоположение мобов, игроков, лежащих на земле предметов в радиусе 15 метров. Интересен тем, что возвращает много точной информации о каждом, кто попал в зону сканирования. Но расход энергии к сожалению нереально велик. Устанавливаются как на робота, так и как внешнее оборудование для компьютера. Технический уровень апгрейда Т1. Радар поддерживает следующие методы: radar --название апгрейда getPlayers() --возвращает таблицу со списком игроков что попали в зону скана. --Радиус сканирования можно задать, без значений сканирует на максимальную дистанцию getMobs() --возвращает таблицу со списком мобов, что попали в зону скана getItems() --возвращает таблицу со списком предметов которые лежат на земле, что попали в зону скана getEntities() -- полное сканирование. Возвращает таблицу всех существ (предметы тоже) содержимое таблицы: {{armor = <уровень брони>, distance = <дистанция от сканера до существа>, health = <уровень здоровья>, maxhealth = <максимальный уровень здоровья>, name = <имя существа>, x = <координата по x>,y = <координата по y>,z = <координата по z>}...n = <количество существ>} Реактор Апгрейд - генерирует энергию за счет распада урановых стержней. Принцип работы тот же, что и у базового улучшения "Генератор", только в виде топлива используются одинарные урановые стержни. Зато энергии вырабатывает нереально много и довольно продолжительное время. Затолкать сдвоенные и счетверенные урановые стержни не представляется пока возможности, похоже размеры реактора не позволяют разместить их в нем. Технический уровень апгрейда Т3. Реактор поддерживает следующие методы: reactor --название апгрейда activate() --запустить реактор deactivate() --заглушить реактор insert() --переместить из активного слота стержень в реактор count() --возвращает остаток времени работы уранового стержня. В тиках. На этом улучшения для роботов заканчиваются, но вот предметы мода еще нет. Контроллер АДД, Часть Антенны, Ячейка Антенны - это фрагменты огроменной вышки, которая позволяет передавать данные на огромное расстояние (2 км). Антенну строить довольно дорого, но если вы желаете дистанционно управлять роботами на большом расстоянии, это выбор для вас. К сожалению расход энергии на передачу данных довольно большой, а так-же невозможно открыть несколько каналов, но дистанцию можно еще сильнее увеличить, если задрать антенну еще выше. Для её постройки требуется соорудить следующую структуру: 1 блок Контроллера АДД, 14 блоков Частей Антенны, 1 блок Ячейки Антенны lde --название антенны События: ld_message --Агрументы - адрес отправителя, дистанция, сообщение :/ Антенна поддерживает следующие методы: getMaxDistance() --Возвращает максимальную дистанцию передачи данных getDistance() --Возвращает установленное расстояние отправки данных getRealDistance() --Возвращает реальное расстояние отправки данных. Оно рассчитывается так: Установленное Расстояние * (LDAControllerY + 16) / 256. Чем выше антенна - тем больше приближение к установленному расстоянию передачи getChannel() --Возвращает текущий канал передачи open(channel:int) --Открывает канал, очень долго, поэтому лучше не переключать часто setDistance(distance:int) --Устанавливает максимальное расстояние для передачи maxPacketSize() --Возвращает максимальный размер пакета broadcast(data:string) --Рассылает сообщение по каналу, услышат сообщение все кто к нему подключен :/ send(address:string, data:string) --Отправляет сообщение конкретному адресату. Оба должны работать на одном канале :/ Мировой интерфейс - креативный блок, который позволяет получать полную информацию по игроку, его показатели жизни, текущее местоположение, содержимое инвентаря и прочее. Фактически это урезанный командный блок, который помогает всячески отслеживать информацию по игрокам. Поддерживает следующие методы: world_interface --название компонента getOnlinePlayers() --выводит таблицу со списком игроков онланй getSpawnLocation(<Имя игрока>, <номер мира>) --выводит координаты точки воскрешения указанного игрока в указанном мире getActiveEffects(<Имя игрока>) --выводит таблицу наложенных на игрока эффектов, а также продолжительность действия и его цифровой код (Id) getPlayerHealth(<Имя игрока>) --выводит уровень текущего и максимального здоровья игрока getPlayerFoodStats(<Имя игрока>) --выводит показания запасов еды. Если используется какой-то мод, который добавляет сытости, то его параметры тоже выводятся в отдельную переменную getPlayerPosition(<Имя игрока>) --выводит поцицию игрока относительно глобальных координат в виде x,y,z,n где n-номер мира. getStackInSlot(<Имя игрока>, <номер ячейки инвентаря>) --выводит информацию по предмету что лежит в указанной ячейке инвентаря игрока destroyStackInSlot(<Имя игрока>, <номер ячейки инвентаря>) --уничтожает предмет находящийся в указанном слоте инвентаря игрока isFlying(<Имя игрока>) --проверяет летит игрок или нет. Возвращает true если летит или false иначе kill(<Имя игрока>) --убивает игрока :/ heal(<Имя игрока>, <ед исцеления>) --моментально вылечивает игрока на указанное количество единиц kick(<Имя игрока>, <Причина>) --отключает игрока от сервера по указанной причине Контроллер мощности - прибор предназначенный для прераспределения энергии между энергобуферами или проводами. Внешне выглядит как энергобуфер, имеет 5 сторон приема энергии и 1 сторону для вывода её. Имеет внутренний интерфейс в виде двух полос с энергией и цифровым обозначением. Принцип действия: принимает в первый буфер любое количество энергии, затем при помощи компьютера перемещает указанную часть энергии во второй буфер и благополучно выводит её из себя через порт вывода. Фактически это управляемый компьютером трансформатор. Взаимодействует только с модом IC2. Имеет довольно интересную особенность, энергия из выходного буфера перетекает в энергобуфер моментально, несмотря на все ограничения по уровням пропуска энергии, тоесть 1000 eu/t перемещается в базовый деревянный энергобуфер не со скоростью 32 eu/t, а моментально, как ни странно, но взрыва не следует. Поддерживает следующие методы: energy_controller --название компонента getInputBufferCapacity() --возвращает текущий уровень энергии входного буфера getOutputBufferCapacity --возвращает вместимость входного буфера getEnergyInputBuffer() --возвращает текущий уровень энергии выходного буфера getEnergyOutputBuffer --возвращает вместимость выходного буфера transform(<количество единиц энергии>) --перемещает указанное количество энергии из первого буфера во второй. Pid :/ - нажимная плита для взаимодействия компьютера с инвентарем игрока. Для взаимодейсвия с ней, надо встать на неё. Поддерживает следующие методы: pid --название компонента pullStackInSlot(<сторона где сундук>, <номер слота из инвентаря игрока>, <номер слота сундука>, <количество перемещаемых предметов>) --перемещает предмет из инвентаря игрока в сундук :/ pushStackInSlot(<сторона где сундук>, <<номер слота сундука>, <номер слота из инвентаря игрока>, <количество перемещаемых предметов>) --перемещает предмет из сундука в инвентарь игрока :/ getStackInSlot(<номер слота из инвентаря игрока>) --возвращает таблицу с информацией о содержимом слота из инвентаря игрока Связыватель инвентаря :/ - прибор который связывает инвентарь игрока с компьютером, то есть через него можно программно работать с инвентарем активировавшего его игрока. Работает независимо от местоположения игрока. Удобная штука для быстрой замены комплекта инструментов или например для быстрого очищения инвентаря от всякого хлама. Поддерживает следующие методы: pib --название компонента getTargetName() --возвращает ник привязанного игрока isConnected() --возвращает true/false если игрок доступен для работы, короче онлайн checkBinding() --проверяет привязку к игроку. Возвращает true/false pullStackInSlot(<сторона где сундук>, <номер слота из инвентаря игрока>, <номер слота сундука>, <количество перемещаемых предметов>) --перемещает предмет из инвентаря игрока в сундук :/ pushStackInSlot(<сторона где сундук>, <<номер слота сундука>, <номер слота из инвентаря игрока>, <количество перемещаемых предметов>) --перемещает предмет из сундука в инвентарь игрока :/ getStackInSlot(<номер слота из инвентаря игрока>) --возвращает таблицу с информацией о содержимом слота из инвентаря игрока :/ Чатбокс - прибор позволяющий отправлять и получать сообщения из игрового чата. Имеет ограничение по радиусу действия и не может отправлять личные сообщения. chatbox --название компонента События: chat_message --Агрументы - адрес чатбокса, Ник игрока, сообщение chat_command --Возращает данные те же что chat_message. Однако вызывается только в том случае, если первый символ в сообщении был #. Кроме того, такие сообщения не видны в чате (только в чатбоксах). Поддерживает следующие методы: getRadius() --возвращает установленный радиус передачи сообщения getMaxRadius() --возвращает максимальный радиус передачи сообщения setRadius(<дистанция>) --устанавливает радиус в котором будут видны сообщения say(<Текст>) --выводит в чат сообщение Креативный чатбокс - креативный прибор позволяющий отправлять и получать сообщения из игрового чата. Не имеет ограничения по радиусу действия, умеет отправлять личные сообщения. admin_chatbox --название компонента События: chat_message --Аргументы: адрес компонента, id измерения, playerPosX, playerPosY, playerPosZ, дистанция до игрока, имя игрока, сообщение. chat_command --Возращает данные те же что chat_message. Однако вызывается только в том случае, если первый символ в сообщении был #. Кроме того, такие сообщения не видны в чате (только в чатбоксах). Поддерживает следующие методы: say(message: string) --Отправляет всем игрокам сообщение message. tell(name: string, message: string) --Отправляет сообщение message игроку с ником name. Есть еще парочка блоков, но увы они отключены внутри мода, поэтому посмотреть на них не удастся. Кому интересно, это телепорт - который умеет отправлять не только существ, но и блоки(тех же роботов), большой конденсатор - просто батарейка с запредельной емкостью, она используется как накопитель энергии для телепорта. На момент написания статьи мод имеет версию OpenTechnology-0.6.17. Не все описанные блоки работают, не буду перечислять все проблемы этого мода, просто на каждой неработающей детали или функции поставлю знак ":/", надеюсь автор мода прочитает эту статью и постарается починить все, что неработает. Собственно программируйте, разрабатывайте новые интересные схемы и думаю мод OpenComputers вместе с аддоном OpenTechnology вам в этом очень помогут. А с вами был Asior и до скорых встреч на проекте Computercraft.ru
  18. Предлагаю добавить keypad из opensecurity в вайтлист wg, +копнуть в сторону плагинов на кастомные флаги и позволить игрокам разрешать использование устройств из opencomputers в своём привате
  19. Доброго времени суток все, кто меня помнит и не помнит, а тем кто не знал и еще и забыл вообще печеньку. Как всегда, в своем репертуаре, я захожу, выкладываю какую-то идею и ухожу с видом будто это не я. Не могу сказать, что это не такой же случай, но сейчас не об этом. Возможно, на первый взгляд, идея может показаться слишком сложной, но, возможно, оно того стоит. Думаю, на проекте есть хорошие программисты на Java, C и, тем более, Lua. Предлагаю написать мод, который заполнит невидимую пропасть между IC2(или нет) и OC, которую, возможно, и не заметно. Мод, который добавит в игру собираемую из брони IC2 и компонентов OC броню, не отличающуюся или даже лучше по свойствам от IC и имеющую всвозможности роботов из OC, а именно(прошу представить это в голове, возможно дополнение): Включение, отключение и регулировка возможностей брони программним путем налету; Возможность программного управления персонажем не против воли игрока; Возможность считывать и передавать через компоненты OC данные об игроке (вайфай карта, обем данными между частями брони); Возможность использования дополнительного инвентаря, если установлен соответственный компонент ОС; Жидкостное хранилище при установленном соответствующем компоненте ОС; Возможность соединить очки OCGlasses с броней и управление с костюма. И это не все. Дальше - больше! Это только поверхностные возможности брони "из Crysis". Спасибо за внимание! Очень надеюсь на отклик.
  20. jammer312

    GPS

    Недавно столкнулся с тем, что апгрейд навигации, предоставляемый модом, достаточно убог, при этом он занимает компонент-слот и относительно затратен для крафта. Был удивлен тем, что еще никто не запилил систему геопозиционирования (gps), собственно, написал ее сам. Заранее скажу, что, очевидно, ее можно улучшить, в том числе перенести работу контроллера на один из реле, но первая попытка по написанию системы, состоящей лишь из микроконтроллеров, была неудачной, возможно, из-за малого уровня компонентов, которые вмещают микроконтроллеры, но скорее всего из-за того, что я криво что-то написал (вполне вероятно, если учесть отсутствие вывода ошибок и нормального дебага). Вполне вероятно, что текущую версию можно перенести на контроллер (с минимальными модификациями для избавления от необходимости в операционной системе), и все заработает, но мне это не нужно и лень. Использование клиентом: Требуется беспроводная плата. Клиент(то, что хочет получить свои координаты через gps) броадкастит одно сообщение с содержанием "gps_request" на порт 312 (можно поменять, менять надо в коде реле), через некоторое время, если сообщение достигло всех 4 реле, он получает в ответ сообщение на порт 312 (опять же, можно поменять, на этот раз в коде контроллера), содержание сообщения: строка "gps_response", число x, число y, число z; где x,y,z - координаты клиента, x и y по горизонтали, z - высота. Использование сервером: Сервер состоит из компьютера-контроллера с установленной OpenOS и четырех микроконтроллеров, которые я буду называть (и уже называл) "реле". Реле должны иметь беспроводную и сетевую платы, а также процессор и память (я грузил 2 планки 1 уровня, но даже одной должно хватить). Помимо этого в них должен быть биос с программой(2 ссылка), соответствующей определенному реле. Программа должна быть отредактирована под соответствующее реле (4 переменных в начале, координаты, где (по крайней мере в моей системе) y полагается горизонтальной осью, и идентификационная строка реле, которая должна быть уникальна для конкретной системы (иначе не будет работать)). Предпочтительно на каждом реле по разу запустить wakesetter (программа, третья ссылка). Каждый реле должен быть подсоединен к компьютеру-контроллеру кабелем, помимо этого все 4 реле должны быть некомпланарны (расположены так, чтобы нельзя было провести одну плоскость через все 4 реле) . Компьютер-контроллер должен иметь помимо базовых составляющих, необходимых для работы, беспроводную и сетевую платы. Для запуска системы нужно лишь запустить программу gps_controller (1 ссылка), которая разбудит реле в сети с ней и начнет выполнять свою функцию. Программа является блокирующей, т.е. не позволяет пользоваться компьютером, на котором установлена, пока сама работает. Программа будет выводить print'ом пойманные сигналы от реле, выводить им же координаты, когда сигналов достаточно (когда все 4 реле поймали запрос); уведомлять о таймауте зафейлившихся запросов (когда запрос достиг не всех реле, программа выжидает 2 секунды, чтобы удостовериться в том, что сигналов от остальных реле на его счет она не получит, и удаляет его из таблицы обработки). Ну и, естественно, отвечать на запросы координат. Принцип работы: Когда реле получает запрос от клиента, оно передает свои координаты, идентификатор и расстояние до клиента контроллеру. Контроллер, набрав 4 таких различных (от реле с разными идентификаторами) запроса, вычисляет координаты клиента и отсылает их ему. Подробнее о вычислении: известны 4 точки и расстояние от пятой точки до каждой из них. Тогда мы можем построить по сфере на каждой точке с радиусом, соответствующим расстоянию до пятой, причем эти 4 сферы пересекутся, и пересекутся только в этой точке. Пересечение очевидно, ибо все они проходят через эту точку. Единственность пересечения гарантируется некомпланарностью центров(в трехмерном пространстве), доказывать ее мне лень, примите как факт. Запишем гмт пересечения сфер системой уравнений (каждое вида (X-xi)^2+(Y-yi)^2+(Z-zi)^2 = Ri^2, где Ri - i-тое расстояние, xi,yi,zi - координаты i-той точки, X,Y, Z - координаты искомой(-ых) точки(-ек)), получим 4 уравнения в системе, вычтем из первого, из второго третье, из третьего четвертое, получим систему линейных уравнений на 3 уравнения, при условии некомпланарности точек и верных входных данных она совместна и имеет единственное решение, находим его через метод Крамера. Задача решена. Код: контроллер: http://pastebin.com/QD44ZWBv реле: http://pastebin.com/eAzPst2s прога, которую желательно по разу запустить (записать на биос чип, вставить в микроконтроллер и включить его) на каждом из реле, она позволяет контроллеру их включать через сообщение на модем ("gps awake"): http://pastebin.com/XijvUbB9 Скрины: Как может выглядеть сервер: Скрин того, что он выводит во время работы: Скрин клиента (планшет) с простым кодом для проверки: Следует заметить, что планшет на самом деле на блок выше, чем координата игрока, также следует еще раз для себя заметить, что координаты идут в порядке плоскость-высота, а не как в майне. Сверху код проверщика, чуть ниже зафейленная попытка, ибо сервер gps был вырублен, чуть ниже успешная попытка уже при включенном серве.
  21. Пришло время для моей собственной первой темы. Когда-то я наткнулся на возможность менять цвет индикатора у роботов и чуть погодя, реализовал отображение заряда робота с помощью изменения этого самого индикатора. Сейчас всего 4 градации Синий для заряженного больше чем на 75%, сине-зеленый для заряженного больше чем наполовину, оранжевый для заряда больше 25% и тускло-красный для заряда меньше 25% Распространяется через hpm, он же hel package manager любезно предоставленный Totoro доступный вот в этой теме. Для установки нужно установить hpm с помощью pastebin run vf6upeANи затем hpm install bluesдля установки файла blues.lua в /etc/rc.d/blues.lua, после чего нужно выполнить регистрацию нового rc модуля командой rc blues enableИ перезагрузить робота. Вот так примерно выглядит робот с индикацией, которая обновляется раз в пять секунд и позволяет с первого взгляда определить робота, у которого низкий заряд. Дополнительные ссылки: Пакет на hel.fomalhaut.me Код на gitlab.com
  22. Вот часть из моего кода к примеру: a = "привет" function Message(msg, nick) if msg == a then print ("Ты молодец") end end while true do local _, _, nick, msg = event.pull("chat_message") if msg ~= nil and nick ~= nil then Message(msg, nick) end end Если в чат человек введет слово "привет" напишет на экран "Ты молодец", но если человек напишет "Привет" или "ПрИвЕт" то тогда не сработает. И вот у меня такой вопрос можно это как то исправить?
  23. Эта кoпалка не требует для рабoты лишних деталей, т. к. кoд запиcываетcя на EEPROM. При cбoрке рoбoта, вмеcтo ЖД, мoнитoра и клавиатуры мoжнo дoбавить чтo-тo дейcтвительнo нужнoе, например раcширение инвентаря или аккумулятoра. Требoвания: Инвентарь (чем бoльше - тем лучше) Кoнтрoллер инвентаря. Геocканер. Инcтрумент, врoде алмазнoгo или иридиевoгo бура. Хoвер-апгрейд (еcли неoбхoдимo) При cбoрке мoжнo дoбавить: Апгрейд-верcтак. (пoзвoляет экoнoмить меcтo) Чанклoадер. Генератoр. (при наличии чанклoадера реже будет неoбхoдимocть ездить к заряднику) Беcпрoвoдную cетевую карту. (пoзвoлит рoбoту oтправлять cтатуcные cooбщения) Пример минимальнoй и пoчти макcимальнoй cбoрки (при желании, мoжнo дoбавить раcширения) Иcпoльзoвать oчень прocтo: В кoмпьютер c интернет-платoй вcтавить EEPROM. Запуcтить кoманду pastebin get eFkAZP0u b && edit b && flash b -q && rm b Пo желанию, редактирoвать параметры - первые переменные этo кoличеcтвo нoд, минимальная плoтнocть, макcимальная плoтнocть, выcoта (неoбхoдимo указывать для мирoв, в кoтoрых нет бедрoка), пoрт, cпиcoк oтхoдoв. Сoхранить/закрыть файл. Дocтать EEPROM из кoмпьютера и вcтавить в рoбoта. Выдвинутьcя на меcтo дoбычи. Пocтавить рoбoта. Дать рoбoту бур. Пocтавить вoзле негo кoнтейнер и включенный зарядник. Включить рoбoта и ждать завершения рабoты. Функциoнал: Рoбoт cканирует квадраты x8 блoкoв пo гoризoнтали, пocтепеннo oпуcкаяcь вниз. Дoбывает блoки из заданнoгo диапазoна плoтнocтей. Дoйдя дo бедрoка, рoбoт пoднимаетcя на cтартoвую выcoту и перехoдит к cледующей кoлoнне. При низкoм урoвне заряда аккумулятoра, пытаетcя заправить генератoр (еcли имеетcя), в прoтивнoм cлучае или при низкoм урoвне заряда инcтрумента, oтправляетcя на cтартoвую пoзицию, к заряднику. Так же, при запoлнении инвентаря, cбраcывает муcoр, при наличии верcтака упакoвывает реcурcы в блoки и еcли меcта вcе-равнo малo, тo cледует к кoнтейнеру, cбраcывает лут и вoзвращаетcя к рабoте. Еcли имеетcя чанклoадер, тo при начале рабoты oн включаетcя, а при завершении выключаетcя. Еcли имеетcя беcпрoвoднoй мoдем, тo рoбoт пocылает cтатуcные cooбщения: 0 - неразрушимый блок (скорее всего - приват) 1 - контейнер заполнен 2 - контейнер отсутствует 3 - зарядка инструмента 4 - заправка генератора 5 - конец работы
  24. Всем здрасьте Суть вопроса: раньше, например, на версии 1.7.10 майна geolyzer мог возвращать функцией analyze() в таблице значение metadata на версии 1.12.2 этого не происходит. В таком случае это у меня конфиг так прописан, что не происходит возвращения этой переменной? хотя в конфиге такой настройки не находил это мод теперь так работает, что не возвращает metadata блока? другой вариант? Кто сталкивался - отзовитесь, значение этой переменной нужно, например, для работы с Forestry, потому, как блоки Forestry именуются, к примеру name="forestry:resources". Раньше по metadata можно было точно узнать, что за блок, сейчас, соответственно, нет. Раньше - версия 1.7.10, теперь - версия 1.12.2
×