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

Лидеры


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

Показан контент с высокой репутацией за 20.05.2019 во всех областях

  1. 13 баллов
    (проект в разработке) Цель данного проекта - создание нейросети и условий для ее самообучения. В идеале, это будет бомжовый робот минимальной комплектации (возможно даже без жесткого диска), который в зависимости от окружающих условий будет определять свою полезность. Также, он будет "программироваться" снаружи с помощью окружения оставленного другими роботами, формирующими "улей". Апогеем будет саморепликация. Кроме достижения цели, важен и процесс. Наблюдать за самообучением и выбором действий у нейросети очень интересно. Нейросеть изнутри: Мигающие точки - нейроны, линии - синапсы (связи), справа эмулятор мира майнкрафт на движке Love 2d. Нейросети устроены похожим образом. Есть входные значения, скрытые слои и выходные значения. В моей программе робот собирает информацию вокруг себя. На вход подается: Есть ли блоки над, под и перед ним Насколько много клеток он "разведовал" за последнее действие Его позиция в виде значений x,y,z от 0 до 1 Иногда я тестирую со значениями стороны куда он смотрит, возможностью двигаться, расстоянию до последней удачной копки Нейросеть "думает" и выдает 5 значений, которые соответствуют действиям движения 1) вперед, 2) вниз, 3) вверх, 4) вправо, 5) влево. Робот выполняет большее из этих значений. Далее, после действия, я вычисляю коэффициент полезности r [0..1] для этого действия. -- swingSucces: количество вскопанных блоков за действие [0..3] -- input.exploreSucces: коэффициент разведки [0..1], где 0 - уже разводовал все 3 блока, 1 - впервые проверил эти 3 блока -- logic(input.sweetsD < input.old.sweetsD): расстояние до последней удачной копки увеличилось 0, или уменьшилось 1 r = (swingSucces + input.exploreSucces + logic(input.sweetsD < input.old.sweetsD)) / 5 Нейросеь обучается, и в выбранное выходное значение приписывается r a остальные уменьшаются\увеличиваются на 1-r for i=1, #output do output[i] = switch i when actKey (output[i]+val^2)/2 when rndKey (output[i]+(1-val))/2 when oppositeKey (output[i]+(1-val))/4 else output[i] nn:propagate(output) Теперь матан. В начале я использовал обычный Персептрон, найденный готовый на ЛУА, но который мне пришлось править. Проблема в том, что он не может учитывать последние состояния. Нейросети с памятью называются "Long short-term memory" или LSTM, где каждый нейрон выглядит вот так: Найдя библиотеку synaptic.js, хитрыми путями я извлек из нее готовую LSTM сеть, которая получилась на 53 000 строк. Но это не проблема, если зайдет, я перепрограммирую ее на LUA. Текущее состояние сети - отстой. Я неправильно ее обучаю, так как не знаю какие значения выдавать для "обратного распространения ошибки". Круча разные коэффициенты, у меня получилось научить ее двигаться по спирали, как карьерный робот. Сейчас, когда я добавил во входные значения расстояние до последней удачной копки, он научился "кушать" как яблоко, но с огромный количеством лишних действий. В самом майне блоков намного больше и это выглядит вот так. На первом скрине работал 1 робот, на втором штук 6. Сейчас в их действиях слишком много шума. Я специально не даю им кирки, что бы они не унеслись в бесконечность. Фидбек Мне нужно помощь. Подскажите, что лучше подавать на вход, и как обучать сеть. Главная проблема, что для обучения я должен указать какие значения должны быть на выходах при текущих условиях, а я и сам не знаю. Обычно, робот теряется в пустом пространстве и я не знаю какое действие ему казать как "единственно правильное". А так, буду сюда отписываться и отчитываться о процессе разработки. Update 20.06.19, веб-версия эмулятора
  2. 10 баллов
    Всем привет. Представляю вам программу для почти полного управления дроном. Но сначала короткая предыстория: Из возможностей отмечу следующее: Перемещение по сторонам света без улучшения "Навигация"(Спасибо версии OC 1.7.3) Возвращение дрона к управляющему планшету(Компьютеру) Удалённый интерпретатор Привязка дрона к управляющему планшету(Почти полная невозможность угона) Красивый Динамичный интерфейс(Отображение заряда планшета, время, заряд дрона, уровень сигнала) Остальные функции можно найти в программе или в скриншотах. Установка: На планшет (Для обладателей интернет-карт): pastebin get 8eEpZtdi drc.lua Для дрона (Для обладателей интернет карт): pastebin get vt7biZzP drc.lua && flash -q drc.lua drc.lua После вынимаем биос и вставляем в дрона. Первый запуск: Первый запуск сопровождается привязкой дрона к порту(Порт можно увидеть открыв дрона) и адресу беспроводной карты. Из-за этого возможность угнать дрона стремится к нулю, так как для первичной настройки нужно стоять не дальше 3 блоков от дрона. Пишем: drc <порт дрона> После этого дрона невозможно угнать, если рядом никого не было и он не мог подслушать сообщение(Перезагрузка привязку не ломает) Пара скриншотов: Видео: P.S Процент справа от шкалы сигнала обозначает не силу сигнала, а мощность передатчиков на планшете с дроном(поэтому для корректной работы нужны одинаковые карты беспроводной сети) В общем на это всё, дань уважения дронам выполнена, теперь могу спать спокойно.
  3. 7 баллов
    Небольшое обновление(Абсолютный контроль над дроном): Доделал интерпретатор, теперь почти неотличим от оригинала. Теперь не нужно писать return чтобы вернуть значение, а так же появилось две функции - sleep() и print(). 1 помогает прекратить код через CTRL+D при исполнении, 2 поможет вернуть значение в работающем коде: Так же добавил утилиту net(*клик*) для того, чтобы загрузить программу на дрона. То есть, можно запустить любую программу командой net <program_name> И она сию минуту загрузится на дрон: Установка: pastebin get gF4URgfn net.lua P.S Так же ещё много мелких правок, но это не суть важно. Так же упёрся в лимит по памяти, но я думаю это уже неважно =d P.P.S В интерпретаторе есть функция 'clear' - если её написать, терминал очистится(как неожиданно, правда?)
  4. 7 баллов
    !!! пост в процессе редактирования... В ближайшее время администрация сайта планирует заменить игровой сервер EvilWorld. В связи с этим предлагается ознакомиться с игровыми особенностями и по желанию принять участие в обсуждении и балансных правках. Сервер обкатаем в режиме тестирования и после окончательных доработок проведем вайп и запустим его в обычном режиме для игры и программирования. Краткое описание (легенда): AtomicWars - PvP сервер на выживание. Действие (игровой процесс) происходит в воображаемом огромном мире в постъядерный период. До сих пор достоверно не известно, кто первым нанес ядерный удар, люди или машины. Но мир изменился. Изменился климат. Периодически возникают мощнейшие ураганы. Растения катастрофически замедлили скорость роста. Изменилась угловая скорость вращения Земли, длительность суток увеличилась в 8 раз. В результате страшных ядерных ударов произошли тектонические изменения в земной коре, наблюдаются огромные и многочисленные мелкие скопления лавы по всей глубине. Озоновый слой и магнитное поле Земли нестабильны, что в свою очередь увеличило фактор опасности от излучения(вспышек) солнца и других космических излучений. Мир населяют мутанты и монстры. Некоторые мутанты имеют огнестрельное вооружение. Также ведется война за территории, влияние и ресурсы между небольшими остатками людей. Программисты контролируют Север, лагодромщики ЮГ. Бандиты(сталкеры) не принадлежат ни к тем ни к другим. Они ведут разбойный и свободный образ жизни. Правительственные войска (Объеденные Силы быстрого реагирования), они же модеры и админы укрепились на военных базах и сдерживают набеги налетчиков, монстров и голодранцев. Программисты ищут способ восстановить машины, робототехнику и науку, чтобы остановить голод и катаклизмы и нормализовать климат. Только у них есть доступ к машинам, контролирующим погоду. Инженеры-лагодромщики никаких целей не преследуют. Они жадно поглощают ресурсы мира, строят лагодромы и неумолимо продвигаются на Север, чтобы уничтожить программистов и захватить новые земли. Легенда не является обязательной и игрок может не выбирать, кем ему быть, и может свободно заниматься своими песочными делами и выживать в одиночку, но будет лишен некоторых китов и фишечек, а также всей полноты кооперативной игры и сопутствующих ей тактик и стратегий. Характер модификаций: IT индустриализация инженерия декор PvE оружие и др. Некоторые ключевые моменты геймплея: игровой процесс происходит на огромной территории игровые "расы" : ИТ(программисты), Инженеры(лагодромщики), Сталкеры(бандиты). У каждой расы свой префикс, киты и преимущества* игрок автоматически потребляет по мере необходимости пищу, если она есть в специальных слотиках тактического GUI источники света: временные факелы или электрические источники освещения кастомный дроп с мобов кастомная генерация добавлены кастомные аптечки разных тиров добавлены кастомные войсковые пайки разных тиров добавлен полиэтилен добавлено кастомно несколько растений(лук, томаты, кок-сагыз) и их семена отключен спавн гевеи(только на черном рынке) несколько кастомных руд и камней отключены некоторые ванильные мобы (ведьма, дракон, житель) добавлено оружие (огнестрельное, лазерное, плазменное, химическое, ядерное) Оружие не разрушает мир. доступ к эндерчесту с консоли (платная команда) рандомная телепортация для расселения, по желанию (большой кулдаун, платная команда) GUI аукцион для торговли реурсами ограниченные жизни (хардкор режим BetterQuesting) Игроку при старте дается 200 жизней. При полном уничтожении игрока игра для него заканчивается периодические киты отключен лазер ИК мощный стартовый кит (плазменный пистолетик, инструменты, спички, тактичка, сканер, еда, аптечки, набор шахтера) стационарные базы правительственных войск, на которых можно пополнить запасы и получить некоторые разведданные * полностью отсутствует консольная телепортация (кроме установки дома и ТП на него в небольшом радиусе) путешествие в др. локации только через телепортационные врата, которые игроку придется скрафтить самому. В других измерениях уже будут админ врата, коды к которым можно получить из разведданных, расшифровав их. ежедневные киты кастомные игровые саунтреки* редкие, но опасные аномалии, о приближении которых игрок получает оповещение. Для того, чтобы избежать дебаффов, нужно находиться на высоте не выше чем 30 блоков по Y. Как правило, перед конкретным видом аномалии за некоторое время до ее наступления небо приобретает характерный цвет. Самая страшная аномалия - красное небо. плоский бедрок в один слой (не факт, что это будет, но возможно) включенный реактор ИК наносит урон радиацией в радиусе 5 блоков (ЗК блокирует дебафф) радиоактивные руды (блоки в мире) наносят урон радиацией в радиусе 5 блоков (ЗК блокирует дебафф) радиоактивные руды (айтемы в инвентаре) наносят урон радиацией (ЗК блокирует дебафф) бедрок наносит дебафф радиацией (ЗК блокирует дебафф) максимальный голод убивает мгновенно сильный голод накидывает некоторые дебаффы (медлительность и т.п.) ап роботов (размер главного аккумулятора и некоторые др. хар-ки) добавлена соль в некоторые ключевые рецепты (реактор, солнечные панели, чанклодер, робо-тессеракт, камера ядерного синтеза и др) добавлены специальные кастомные айтемы, которые в китах может периодически получать только та или иная раса для ролевого разделения и создания дефицита того или иного реса на аукционе приваты скорее всего будут отключены, или очень сильно ограничены по размеру, если силовые поля пройдут тестирование кастомные данжи и постройки постапокалиптического антуража (скорее всего не будет. Только игрок Doob прислал одну постройку в виде подземной казармы трехэтажной и тоннелем на поверхность.) Если в течении ОБТ что-то успеем сделать, тогда включим кастомную генерацию данжей и построек в мире. квант скорее всего будет отключен или будет стоить по крафту очень дорого миникарта отсутствует. Добавлен мод атлас. Добавлен мод сканер движения. мировая карта основного мира имеет соотношение сторон 1:4 (X:Z) на сервере ведется учет киллсов, и на сайт планируется вывести ТОП игроков К/D рецептура в подавляющей своей массе дефолтная за исключением совсем убогих или противоречивых рецептов (не исключено изменение в процессе игры для баланса) ураганы сносят ТОЛЬКО фиксированные блоки из списка (скорее всего это будут мелкие растения, кропсы, некоторые строительные блоки, которые теоретически могут сносится ураганом в реальности) Ураганы не разрушают мир из соображений эстетики. и др. изменения * - будет активировано после ОБТ Также в игре благодаря нашим форумчанам java-программистам NEO и vx13 появятся масса новых апгрейдов для роботов и дронов, которые они оперативно разработали для нужд сервера по просьбе администрации: солнечные панели персональный чанклоадер мировой навигатор, который получает мировые координаты ультимейт геосканеры (получают всю информацию о блоке в большом радиусе, тип руды, состояние кропса ИК и пр.) сундучки тессеракт для робота (робот может сендить рес из пузика прямо в МЕ сундук, и даже сквозь измерения) и др. Дополнительная информация и вносимые изменения по модам, балансу, новым фишкам, правкам и изменениям будет появляться в этом посте. Лог всех изменений будет фиксироваться в этой теме. Проморолик: Несколько скринов:
  5. 6 баллов
    В общем я много думал, и это не вариант. Если превратить выходные нейроны во внутренний слои и с них снимать значения, то последний один нейрон а.к.а "полезность" просто настроится всегда показывать 0. Для нейросети это беспроигрышный вариант - робот забился в угол, нейросеть определяет что польза будет 0, и ты ей обратным распространением ошибки подкрепляешь и передаешь 0. В общем, не выйдет так делать. Последние 3 дня работаю над экспортом эмулирующей программы в браузер, но и развлекаюсь добавляя анимации
  6. 6 баллов
    С небольшим запозданием, но я таки обновил сервер снова, и исправил все баги. Итак, теперь сервер постоянно обменивается с клиентами пингами. Это позволяет поддерживать соединение "в тонусе" и не давать ему отвалиться, как на TCP подключениях, так и на веб-клиенте. Для теста я держал соединение между веб-клиентом и программкой в эмуляторе OC открытым примерно два часа. Ничего не сломалось. Кроме того я добавил больше контроля над состоянием соединения. В веб клиенте фон будет загораться красным в случае проблем с соединением, так что это будет легко заметить и обновить страничку. В библиотеке для OpenOS добавились новые методы: server:ping(content[, timeout]), boolean - позволяет послать серверу Stem пинг. В качестве контента указываете любой кусок данных. Сервер должен будет его вернуть в точности чтобы подтвердить пинг. Метод блокирующий, ждет ответа от сервера вплоть до таймаута (который по дефолту 5 секунд). Возвращает true или false. server:isConnected(): boolean, error - проверка того, установлено ли подключение к серверу Stem. Если установлено, вернет true. Если не установлено - вернет nil и сообщение об ошибке. server:reconnect(): server, error - если что, этой командой можно переподключиться к серверу. Вернет ссылку на самого себя (объект server) в случае успеха. В случае ошибки, как водится, nil и строку с сообщением об ошибке. Подробный список команд можно полистать тут. Установить новую версию библиотеки можно по прежнему из Hel: hpm install stem Если библиотека уже была устанвлена, можно только обновить: hpm upgrade stem Если вы не пользуетесь Hel, то качайте по прямой ссылке: wget https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua
  7. 6 баллов
    ВНИМАНИЕ!!! ОБНОВЛЕНИЕ. Сервер STEM ночью был обновлен и перезагружен, всё что было к нему подключено - отключилось. Что нового? Новая веб-страничка. Теперь там появился веб-клиент. Мы можете подключиться к любому каналу и почитать, что там пишут. И даже написать самому. Конечно свободы там меньше чем если работать через OC напрямую - послать любые данные не получится, только UTF-8 текст. Но зато не надо писать код, а можно просто с сайтика всё отправлять. Кроме того, я отрефакторил внутреннюю структуру сервера, поменялось довольно много кода. Всё пока еще сырое, активное тестирование и сообщение о багах приветствуется. В ближайшие несколько дней буду фиксить баги и добавлять остальные обещаные плюшки, типа ping пакета.
  8. 6 баллов
    Программа находится в разработке. Постараюсь упростить процесс настройки программы. Данная программа сканирует содержимое вашей МЕ системы и поддерживает заданное количество указанных в списке предметов. Иными словами предварительно крафтит (preCraft). Это полезно на развитых индустриальных базах, где практически всегда есть медленные рецепты с высокой импульсной нагрузкой, так что если заранее их выполнить можно повысить быстродействие вашего автокрафта. Основой системы является то, что me_interface предоставляет нам информацию о содержимом МЕ и о списке крафтов, а так же предоставляет объекты управления заказанными из OC крафтами. К сожалению получить информацию от текущих крафтах заказанных не из ОС не возможно. Так же API содержит ряд багов по работе со списком предметов в МЕ, а именно некорректно написан фильтр (подробнее можете сами посмотреть на git AE если конечно понимаете scala). В связи с вышеперечисленным требуется много ОЗУ >2mb. Из периферийных устройств нужен adapter подключенный к ме интерфейсу и database https://ocdoc.cil.li/item:database_upgrade для формирования списка прекрафтов. Я постарался минимизировать блокирующие вызовы, однако сканирование списка крафтов при начальной инициализации системы занимает много времени. Установка pasebin get 5hnW78DU preCraft.lua Настройка Первоначально вам необходимо отредактировать код программы. (позже сделаю утилиту конструктор) edit preCraft.lua советую провести манипуляции в текстовом редакторе а потом вставить изменения в ОС На 32 строчке программы находится local preCrafts = { { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } 33 и 34 строчки это и есть прекрафты, вам необходимо заполнить поля size = сколько штук поддерживать поле alias необходимо т.к некоторые моды что используют свою систему предметов например GregTech, Immersive Engineering выдают не человеко читаемые имена блоков. Если вас это устраивает alias = nil если нет пропишите имя руками alias = "название вашего предмета" теоретически длинна списка не ограничена, однако database t3 содержит 81 предмет и в данный момент дописывание в конец списка не реализовано. для увеличения списка просто вставьте между 33 и 34 строчками еще строчек и отредактируйте их { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, обратите внимание что в конце списка строка не содержит запятой { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } параллельно с составлением списка добавляйте предметы в database первый слот database соответствует первой строке списка и так далее local preCrafts = { первая строка списка{ size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, вторая строка списка{ size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } После окончания заполнения списка и database положите database в адаптер и запустите программу с параметрами --int2ext --pclName=preCraftList.lua preCraft.lua --int2ext --pclName=preCraftList.lua программа создаст файл preCraftList.lua после чего database больше не требуется Запуск программы preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 параметр --thrLim=4 определяет сколько крафтовых процессоров использует программа одновременно, по умолчанию 2 (если этот параметр не указывать) автозапуск программы можно организовать добавив вашу строку запуска preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 в .shrc https://pastebin.com/5hnW78DU p.s написано под разрешение 160*50. работать будет на любом но консоль отобразится некорректно
  9. 4 балла
    Я вот согласен с товарищем @Fingercomp почти по всем пунктам. Что касается "картошечки", то тут мне видится два пути. Либо ты презентуешь свою программу как ультра-мега утилиту, которая изменит жизни - и тогда она должна иметь хоть какое-то место собственно в жизни игроков форума. То есть она должна быть реально применима в как можно большем количестве случаев. То есть - никакого лишнего кода, все максимально удобно и максимально практично. "Картошечка". Либо ты презентуешь свою программу как творческий эксперимент, и проект для фана - и тогда она естественно будет практически никому не нужна. Но ты получаешь полную свободу творчества, костылизма, велосипедирования и построения какого угодно хаоса. "Сандбокс". А тут у нас "сандбокс", который пытается выдать себя за "картошечку", и при этом сыпет перлами вроде "комьюнити, без обид, ныне представляет из себя весьма жалкое зрелище" и "вы боитесь поднять голову выше банального пинг-понга пакетами между платками, а ваши низменные интересы ограничены фермами пшенца и картошечки на дронах и прочей ерунде уровня третьего класса церковно-приходской IT-школы", за то, что пользователи не увидели особенного смысла и пользы в презентованном творении.
  10. 3 балла
    Ещё можно вызвать req.finishConnect(). Эта функция выдаст true только тогда, когда установится соединение. Если там ошибка будет, эта же функция ошибку эту выкинет. Очень удобно. Можно в цикле со слипом её вызвать и ждать, пока не установится. А потом уже читать можно будет. Заявления, что "никогда такого не было", ложны. Такое было давно, минимум три года. Я безумно счастлив за тех, кому не приходилось сталкиваться с этой проблемой, но на самом деле нормально работающая геталка с интернета выглядит весьма сложнее, чем код от @Alex. Если делать по-простому, то вы в свою программу добавляете бесплатное состояние гонки. Что, как известно, дебажить очень весело и интересно. Ещё замечание. Чтобы не нужно было в цикле нерационально расходовать процессорное время, лучше не слип делать, а event.pull("internet_ready"). Если совсем круто хочется, то можно даже event.pull("internet_ready", req.id()). internet_ready — это сигнал, который посылается компьютеру, если на сокете появляются новые непрочтённые данные. Например, прочла прога сначала 5 байтов с сокета, а потом на него сервер ещё двадцать отправил — тогда-то и получит прога ивент этот и снова считать данные сможет. Так как особо крутые кодеры могут жонглировать сразу десятью интернет-соединениями на одном компьютере, полезно фильтровать ивенты по идшнику соединения, как во втором варианте у меня. P. S. Все эти функции доступны при создании соединения через компонент интернет-платы. Не через либу internet. Это предельно важно. Поэтому я советую всегда не юзать либу, а помучаться, но сделать нормальную считывалку через апи компонента.
  11. 3 балла
    Целую неделю вожусь с графикой. Это поможет сделать нейросеть более нагляднее. А еще, я собираюсь за эту неделю перевести программу тестирования на HTML5, в браузер, так что каждый сможет попробовать свои собственные формулы для обучения. В интерфейсе можно будет брать любые параметры на входе, рассчитывать их как угодно и выдавать результат нейросети. Посмотрим, вдруг кто то из вас найдет метод лучше чем я. P.S. Зачем удалили сообщения? Норм же общались...
  12. 3 балла
    Говорить о ненужности программы, так как ею нельзя копать "картошечку", не ахинея ли великая? Проснись, народ! Майнкрафт не на одной картошке повязан! Не пропустили ли вы "sandbox" у игры в описании? Так можно говорить, что и OC не нужен, и кубики не нужны, и вообще всё не нужно и бессмысленно. А такое уже лечить нужно. Стримы нужны! Но не всякие: Сеть должна иметь нормальную топологию. Работать внутри <=400 блоках модема — ненормально. Потоки лучше тем, что юзеру не нужно мучаться с делением большого контента на пакеты, которые влезают в maxPacketSize. Если такого нет, это ненормально. На получателе последовательность пакетов должна быть такой же, как и на сервере. Если сначала придут 3 байта конца, а потом 8192 байта начала, это ненормально. Получатель должен получить все пакеты, которые отсылает отправитель. Если половина потеряется, а сеть не оповестит даже об этом получателя, это ненормально. Получатель не должен получать дубликаты пакетов. Если сообщение вдруг вырастает в 2 раза по размеру, это ненормально. В сети нужна какая-то защита от дудоса. Если кто-то в пещере делает вайл-тру-ду-сенд, и из-за этого никто другой не может юзать сеть, это ненормально. Наконец, необходимость набирать огромную кучу лишнего кода, есть тоже ненормально. Если для ответа так или иначе надо создать свой стрим, так почему ж не сделать это сразу в либе и отдать аргументом функции-листнеру? Да и одним бы стримом можно было бы справиться, как мне кажется, смысла во втором не вижу. Возможно, что-то из пунктов выше уже реализовано или реализовывается, пока я пишу этот пост. Я, к сожалению, знать об этом не могу, потому что качать какой-то архив с яндекс-диска — это близко к издевательству, а потому я этого и не делал. P. S. Если кто-то обижен тоном этого поста, прошу прощения. Очень понравилось это выступление.
  13. 3 балла
    В целом, улей это достаточно крутая идея. И у меня есть парочка идей по этому поводу. 1) В улье должна заправлять "матка" - специальный сервер, который будет подключаться через интернет-карту к реальному компьютеру, исполняющему, допустим, Python-программу (нейросеть на 4МБ ОЗУ - такое себе). Она анализирует (хотя это скорее ИИ, а не нейронка) задачу, которая ей дана - допустим, создание определенного количества роботов, разбивает ее на несколько мелких (создание робота = поиск ресурсов + крафт компонентов + крафт робота) и делегирует их роботам. Основная задача "матки" - недопущение собственной разрядки и разрядки роботов. 2) Роботы также должны иметь нейросеть или ИИ, но куда меньшие, предназначенные для решения "маточных" задач из разряда принеси-подай, добудь-поставь.
  14. 3 балла
    Еще до нового года, пришла в голову мысль свести майночасы и реальные. Вышел вот такой простой код: https://pastebin.com/raw/x8FXS31P Работает в фоне, можно настроить свой часовой пояс и время обновления таймштампа(Нужно для того, если сервер остановился/вышли из игры). Для работы требуется только карта отладки, ничего больше. Пара фотографий: Время 23:20 Получилась довольно забавная штука, но на практике - не очень. Чаще всего заходишь в игру вечером - в итоге у тебя всегда в игре луна.
  15. 2 балла
    Кек. Не нужно делать то, что уже написано=D timestamp = 0 while true do print(os.date("%H:%M:%S", timestamp) --timestamp - любое число в секундах timestamp = timestamp + 1 end >> 00:00:00 timestamp = timestamp + 1 >> 00:00:01 --И так далее...
  16. 2 балла
    @BrightYC посмотри как работает код: на старте, робот ломая твёрдый блок получает скорость износа инструмента периодически происходит проверка износа инструмента и производится расчёт сможет ли он прокопать область если заряда не достаточно то отправляется на стартовую точку для обслуживания на старте происходит сортировка, поиск сундука, выгрузка, крафт лута в блокои , заправка углём, поиск в сундуке такого же инструмента с износом(или зарядом) более 30 процентов, если в сундуке нет подходящего, то ищем рядом зарядник и пытаемся зарядить инструмент, если зарядился продолжаем копать, если нет то ждём новый инструмент
  17. 2 балла
    Еще одно обновление: Добавлена возможность загрузки модулей с планшета, то есть теперь можно расширять код хоть до полу мегабайта. Для начала была добавлена сериализация, чтобы таблицы нормально отображались при отправке на планшет: Теперь можно не ограничиваться фантазией и писать сколько угодно(в пределах, разумеется, ограничивается лишь размером оперативной памяти у дрона и планшета)
  18. 2 балла
  19. 2 балла
    Вот односимвольный режим, если спутало 'Увеличить/Уменьшить размер экрана'
  20. 2 балла
    Не-не-не, все так и должно быть: read тупо пытается прочесть по кускам контент веб-страницы с сокета. Если сервак пока еще не кинул ошибку соединения, и контент отсутствует - в сокете ничего свеженького не будет, и read выдаст пустую строку. Если соединение говеное, то сокет закрывается, и read выдает nil с причиной. А если URL валидная, то и содержимое будет выдано практически мгновенно, поэтому никаких пустых строк замечено не бывает - либо бывает, но крайне редко. Потому что sleep в опеноси работает через цикл: function os.sleep(timeout) checkArg(1, timeout, "number", "nil") local deadline = computer.uptime() + (timeout or 0) repeat event.pull(deadline - computer.uptime()) until computer.uptime() >= deadline end В твоем случае достаточно спокойно ждать, пока содержимое соединения прочтется - и забить болт на всякие пустые строки. Всяко будет быстрее, чем статичный sleep в каждом запросе
  21. 2 балла
    хмм, хренька какая-то. Это какая версия ос-ки? То есть ты хочешь сказать, что соединение еще только выполняется, оно еще только в процессе, а прога уже хочет прочитать то, что вернул запрос? Так же не должно быть по идее. Это же ерунда какая-то несусветная? Или нет? п.с. кстати, вот нашел старую функцию какую-то, с которой никаких проблем не было никогда. Со времен царя гороха она работает и никаких проблем. Никаких слипов ей не требовалось никогда. Первый раз такое слышу, что слип там необходим для устойчивой работы. function get(url) local request, reason = internet.request(url) if not request then return '' end local text = '' while true do local data, reason = request.read() if not data then request.close() break elseif #data > 0 then text = text..data end end return text end
  22. 2 балла
    А зачем? Что дает рукопожатие и сессия? Это оверхед. Удобно ~= сложно. Ну и получаем дикий оверхед в виде создания и уничтожения нового стрима на каждый пакет. И да, ты все равно оперируешь пакетами (data) только через стрим, а не напрямую. Сессия (что ты вообще имеешь в виду под сессией?) по-прежнему не нужна. Пока чудес не наблюдается. Ждем. Тут главное не забывать, что мы все это творим в рамках майнкрафта. Картошечка на дронах - это наше все, и любая библиотека сильно выигрываешь, если она применима для картошечки. Если не применима - она остается уделом 2-х с половиной пользователей, которые пилят что-то глобальное свое. А такие пользователи обычно пишут свои велосипеды. Что касается связи компьютеров - недостатка в программах для этого нет. Есть, например: Zn - динамическая p2p сеть, которая обеспечит связь по цепочке компов, и проста в использовании как обычный modem. Не требует никакой конфигурации вообще. Stem - брокер сообщений на основе интернет плат. Мультиканальная передача сообщений откуда угодно и куда угодно, включая компы из реального мира. Опять таки - элементарен в использовании. Нуль настройки. И это я только свои проги упоминаю. Их так-то полно. Делали, и не один раз. OpenNet, например. Был и браузер и сайты. Но в рамках сервера Minecraft это затея "на поглазеть один раз". Особого практического применения нет. Ну вот тут я конечно же полностью согласен и поддерживаю. Как творческий эксперимент - программа офигенна. И объем работы проделан неплохой. Короче жду продолжения.
  23. 2 балла
    Вот именно - вы боитесь поднять голову выше банального пинг-понга пакетами между платками, а ваши низменные интересы ограничены фермами пшенца и картошечки на дронах и прочей ерунде уровня третьего класса церковно-приходской IT-школы. Когда на AtomicWars (дай бог ему здоровья и стабильной работы) вы задумаетесь над чем-то более глобальным, чем пароли на двери и бурение шахт друг-другу... на участках, вы так или иначе столкнетесь с необходимостью соединить ваши компьютеры, дронов и роботов в сеть. И именно тогда вы вспомните старину Атомика, который, словно Прометей, принес вам то, что изменит вашу жизнь навсегда. Запомните этот твит
  24. 2 балла
    Итак, первый кусочек исходного кода. Это код обычного персептрона, который я использовал в самом начале. Сейчас я юзаю более сложную нейросеть LSTM, но начинал с этой. https://gist.github.com/Krutoy242/e7b6618e8bc180acbe65b515a9ad1755 Это форк с другого кода, но я улучшил скорость работы сети, исправил ошибки и добавил удобства в работе с сетью. В комментах есть описание и пример работы, пользуйтесь на здоровье. Ладно, реализовать такое не сложно, так что попробую. Ну и кто то сказал что на предыдущей гифке ничего не понятно и я добавил больше описаний
  25. 2 балла
    Спасибо за радушный прием! Просто, у меня в жизни наконец белая полоса началась и можно заняться любимыми делами.
  26. 2 балла
    Сэнгар выдал самому себе и некоторым друзьям из #oc этого роботика. А мод, который их добавляет, как ни странно, — OpenComputers. Сырцы.
  27. 2 балла
    Ого! Градус безумия растёт. Промежуточные адаптеры можно даже не запитывать энергией. Теперь можно динамически подключать не только отдельные сундуки, но и целые сегменты. При неаккуратном использовании этой возможности процессор крашится, не в силах переварить прорву новых компонентов. Про плотность точно пока не скажу, т.к. мозг ещё не привык к этой новой идее. Первой мыслью в голову приходит сетка 3x3x3, чтобы адаптеры дотягивались друг до друга. Возможно, она не оптимальна. Навскидку потери составляют около 4.5% для алмазных сундуков, для уточнения требуется продумать схему доступа, т.к. при такой сетке появляется возможность дотянуться до одного сундука с разных адаптеров. И тут надо подумать, даст ли эта избыточность какие-либо преимущества, например, в виде повышения пропускной способности сети.
  28. 2 балла
    Они пытаются создать что то похожее. Короче аналог МЭ только на ОС. Писал такое когда то, у кого то на сервере такая установка работающая стояла. А рассчеты щас ведут сколько кто сможет захватить сундуков и на чем выгоднее. На адаптере с МФЭ или на куче транспозеров.
  29. 2 балла
    Ограничение на количество MFU в одном адаптере легко преодолимо: транспозер + сундуки с кучей MFU ограничивают количество периферийных устройств лишь размером инвентарей, находящихся в непосредственной близости от транспозера. А если задержки не критичны, то и вообще ограничений нет. Плюс такого подхода ещё и в том, что он снимает ограничение и на количество периферии, задаваемое процессором или серверными шинами. P.S.: От этого поста отпочковалось обсуждение системы хранения на MFU.
  30. 1 балл
    Веб-версия программы для обучения сети: https://krutoy242.github.io/ Будет тормозить, так как я еще не настроил рендер при экспорте на веб страницу. Небольшое описание как пользоваться: Вы можете: Наслаждаться анимационными понтами на 3 FPS Смотреть как связи между нейронами становятся толще. Например, связь между "копнул вверх" (swing up) и желанием двигаться вверх. Пробовать изменять скорость обучения (learning rate) и смотреть как сеть обучается слишком медленно или встает в тупик. Изменять количество нейронов (Hidden 1 and 2) сети и не понимать вместе со мной почему эффективность от этого почти не меняется. В течении недели я добавлю возможность редактировать входные значения прямо на странице, и тогда вы сможете сами пробовать новые способы обучения.
  31. 1 балл
    Бывает необходимость показать время работы или ожидания программы, которое составляет по несколько часов и смотреть что прошло 100500 секунд крайне не удобно, куда привычнее наблюдать в формате часов. Перекопав интернет на LUA ни чего не нашел, только на C# так что адаптировав оставлю примеры здесь, может кому и пригодится. Добавил варианты предложенные @BrightYC Перевод секунд в формат часов Показать сколько прошло времени от включения в формате часов Отсчет времени в формате часов
  32. 1 балл
    1. Да. Но бур заряжать будет нечем и при разряде инструмента вернется на базу, искать зарядник и проверять сундук. 2. Да. При износе кирки робот едет на базу и ищет в контейнере другую такую же, но с меньшим показателем износа.
  33. 1 балл
    Помните мост Рида? Ну так вот. Я тут изучаю Rust на досуге, и пишу мини проекты. Так и получился у меня... Stem Это интернет мост для OpenComputers. Что такое мост Для тех кто не знает что такое мост, и для чего он нужен: мост дает примерно такие же возможности как и linked карта. Он позволяет связать между собой компьютеры OpenComputers, где бы они не находились. Только мост реализует это через интернет карту. Однако по сравнению с linked картой есть один очень крутой плюс. Вы можете подключиться к своему OpenComputers компу не только с другого OpenComputers компа из Майнкрафта, но и из реального мира. Например с телефона. Или с вашего домашнего компьютера. Отличие от моста Рида Я немного по другому подошел к архитектуре проекта. Вместо попарного соединения, Stem реализует систему каналов. Работает это очень просто. Вы можете: 1) послать сообщение в канал X 2) подписаться на сообщения из канала X Количество подписчиков не ограничено. Количество клиентов которые могут посылать сообщения в канал тоже не ограничено. ID канала (по которому происходит подписка и отправка сообщений) служит заодно и паролем к нему. Поэтому если вы хотите создать публично доступный канал - просто опубликуйте его ID. А если хотите создать свой, приватный, канал - просто возьмите ID подлиннее и никому его не открывайте. ID - это последовательность любых байт длиной до 256. Число комбинаций (256 в степени 256) это огромное число, так что уникальных ключей хватит надолго. Пример local event = require('event') -- подключаем STEM local stem = require('stem') -- присоединяемся к серверу STEM local server = stem.connect('stem.fomalhaut.me') -- просим сервер присылать нам сообщения с канала 'my-channel-id' server:subscribe('my-channel-id') -- слушаем эвент 'stem_message' в цикле while true do local name, channel_id, message = event.pull('stem_message') if name ~= nil then print(channel_id, message) end end -- ...или регистрируем листенер event.listen('stem_message', function(_, channel_id, message) print(channel_id, message) end) -- мы можем посылать сообщение в канал -- (причем не обязательно быть подписанным на этот канал -- достаточно просто его ID) server:send('my-channel-id', 'hello there') -- просим сервер перестать присылать сообщение с канала server:unsubscribe('my-channel-id') -- полностью отключаемся от сервера STEM server:disconnect() Одновременно можно работать с несколькими серверами Stem и с любым количеством каналов. Библиотека stem.lua Библиотечку можно скачать напрямую по этой ссылке: https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua Либо установить через HPM: hpm install stem Подробная документация по командам библиотеки находится здесь. Сервер STEM Дефолтный сервер STEM запущен у меня на VPS по адресу: https://stem.fomalhaut.me/ Можете смело его использовать. Единственное, что это тестовый сервер пока. Может пропадать или менять протокол. Новости постараюсь писать сюда. Исходный код проекта находится тут: https://gitlab.com/UnicornFreedom/stem Вы можете скомпилировать его под свою систему и запустить где угодно. Настраивается сервер файлом stem.toml в корневой папке. Дефолтный конфиг может выглядеть так: [tcp] host = '127.0.0.1' port = 5733 [web] host = '127.0.0.1' port = 5780 [general] ping_interval = 60 Чтобы получить полностью свой отдельный и независимый сервер STEM, достаточно будет просто запустить бинарник, получившийся после компиляции. Не забудьте также положить в папку с бинарником папки static и templates. Они нужны для веб-интерфейса. Сервер мультипоточный, и очень производительный. Должен тянуть довольно большие объемы трафика. Но точных бенчмарков я не проводил. Если есть желающие - пишите в IRC, скооперируемся и померяем. 😃 Для того чтобы видеть логи сервера, используйте переменную окружения RUST_LOG. Например чтобы включить полное отображение всех логов: $ RUST_LOG=stem ./stem Веб-интерфейс Если перейти по ссылке на сервер STEM то вы увидите... веб-интерфейс. Веб интерфейс показывает счетчик активных каналов и сессий (клиентских подключений). Кроме того, он дает возможность подключиться к любому каналу STEM и поучаствовать в приеме-передаче сообщений прямо через сайт. Единственное ограничение - как ID канала, так и контент сообщений ограничивается тем, что можно закодировать в UTF-8. Ну вот и все Мост в принципе уже полностью работоспособен. Все идеи, пожелания, отчеты о багах пишите сюда, либо на issue трекер в репозитории. Если кто-нибудь хочет помочь с написанием клиента STEM на своём любимом языке программирования - обращайтесь ко мне в ЛС, IRC или пишите в этой теме. Написать клиент несложно - для примера можно глянуть на код библиотеки для OpenComputers. Она состоит всего из 150 строк кода. Enjoy! 😃
  34. 1 балл
    https://github.com/svitoos/PersonalChunkloaderOC/releases
  35. 1 балл
    Для экспериментов и проверки каких-то механик можно установить любые значения конфига, это не возбраняется. Но при публикации таких программ надо предупреждать, что для их работоспособности нужно читерить с конфигом. А чтобы поговорить о теоретической реализуемости, нужны точные условия задачи.Например: нужно прилететь дроном за 100 блоков, бросить уран и улететь обратно.
  36. 1 балл
    @Totoro добавил в мордо-моську навбар адаптивный. У себя иконку роботика из навбара наверно выкинь, это у нас на сайте возможно она останется, а может и выкину ее. Вдруг когда-то захочешь какие-то доп. статические странички сделать, отладочную информацию, ссылки на доки и пр. Вдруг пригодится stem.loc.zip
  37. 1 балл
    то есть получается для надежной связи с роботом, который где-то катается и получает инфу какую-то и команды, этот робот должен периодически сам переподключаться на канал? Иначе он рискует оказаться вне связи?
  38. 1 балл
    Хорошо, уговорил, будет тебе русскоязычная документация, но ко второй версии, и вики на GitHub мне в этом поможет Может, еще какие предложения есть?
  39. 1 балл
    Я очень обожаю дронов из OC, довольно быстрые и манёвренные(и дешёвые!). Меня смущает насколько автофермы из разных модов дорогие, так что вот решение этой проблемы: https://pastebin.com/9TBqRHPw (Для ленивых и счастливых обладателей интернет-карты: pastebin get 9TBqRHPw dronefarm.lua) (Проверьте, работает ли у вас сбор культуры на ПКМ, иначе же работать не будет(Версия на ЛКМ была, но она неудобная)) В программе всего 4 настройки: Размер фермы по X и Z Ожидание в секундах(Это нужно для того, чтобы культура успела вырасти) Ожидание при зарядке(Если дрон разрядился во время полёта) Процент заряда, при котором дрон вернётся домой Конфигурация дрона совсем простая, нужен лишь инвентарь(Можно и два инвентаря, так будет лучше). Установка довольно простая: Скачиваем ферму Делаем чистый EEPROM Вставляем в комплюхтер Пишем flash -q dronefarm.lua dronefarm(Не обязательно dronefarm, можно что угодно написать) Вставляем в дрона ??? Профит! Расстановка фермы: Где жёлтый - граница фермы Красный - место стоянки Длина и ширина может быть любой, главное чтобы зарядки хватило(Если у дрона переполнится инвентарь или разрядится до 20% от общей зарядки единиц - он вернётся на базу)
  40. 1 балл
    ДИСКЛЕЙМЕР При просмотре исходников серверов возможны противопоказания необходима консультация специалиста. Побочные эффекты при просмотре исходников серверов: Эбола, эпилепсия. Ни в коем случае не использовать код карты на практике. Всем привет! После большого перерыва я сделал новую карту. Суть карты взломать аутентификацию маршрутизатора и разрешить доступ в интернет. Сюжет карты: вы школьник, вам около одиннадцати лет, вы учитесь очень плохо. В один день вы принесли домой пять двоек, на вас очень сильно разозлилась мама и решила что во всём виноват интернет. Вызвав компьютерщика, она рассказала ему ситуацию и он в свою очередь заблокировал доступ в интернет на маршрутизаторе, поменял пароль для главного аккаунта, чтобы никто кроме него не мог изменить статус доступа в интернет. Насмотревшись как открывать порты в ютубе, вы замечали в роутере родительский контроль и подумали что сейчас у вас всё получится. После попытки входа, вы увидели сообщение, после которого вы чуть не сломали себе монитор. Ваша задача взломать ваш домашний маршрутизатор (роутер) с помощью вашего компьютера (пинать ногами роутер не нужно) и разрешить доступ в интернет. Чтобы удостоверится, что вы разрешили доступ в интернет - нужно попробовать зайти на сайт wikipedia.org и у вас должен высветится этот сайт. Правила карты (На вашу совесть, чтобы было интересно): Запрещается просмотр исходников серверов (роутера и сайта wikipedia). Команда для открытия браузера: browser Подсказки по прохождению карты можно попросить у меня во ВКонтакте: https://vk.com/superrolan51 Ссылка на небольшой ролик по карте: Клик Ссылка на сборку: Клик Ссылка на портативную сборку: Клик (Для версии Forge 1.7.10) Удачи в взломе! P.S. Не пишите в комментариях подсказки к карте Если у вас есть идеи для новых квестов - отписывайте сюда.
  41. 1 балл
  42. 1 балл
    Эти посты были перенесены из темы про мод OpenComputers, идея зародилась в этом посте: Кому не не лень писать много кода, рассказываю: Робот способен не только устанавливать блоки, но и сразу линковать MFU на них. И если робот размещает линкованные MFU в определённом порядке в своём инвентаре и в определённом порядке переносит их в определённые же сундуки, то порядок MFU в слотах сундуков всегда определён. И если алгоритм работы с массивом сундуков всегда возвращает MFU в те же самые слоты, где они были ранее, то порядок не нарушается никогда. И если игроки с шаловливыми руками лишены доступа к этим сервисным сундукам, то и порядку MFU в сундуках ничто не угрожает. Дистанция 3 для MFU – это много или мало? Попытаюсь придумать, например, систему хранения на одном адаптере, облепленном сундуками. Максимальное количество сундуков = 5^3-8+6-4. Это куб 5x5x5 с отрезанными блоками в каждой из 8 вершин и добавленными в центре каждой из 6 граней. Ещё 4 блока потрачено на адаптер и кабель до него. Выходит 119 сундуков. Но для компактности я бы пожертвовал всеми сундуками, выступающими за грани. Получится 114 сундуков. Такая схема легко масштабируется, и два адаптера обеспечат систему хранения из 228 сундуков. Часть слотов в сундуках, непосредственно контактирующих с адаптером, будет занята MFU. Если сильно захотеть, то от части MFU можно избавиться, так как прямой доступ к некоторым из сундуков не обязателен, и к ним можно обращаться через соседние сундуки. Для этого потребуется аккуратно реализовать энергонезависимое хранение информации о содержимом сундуков с учётом того, что последняя операция переноса может и не завершиться успехом. Впрочем, кеширование полезно в любом случае. Вот, как-то так и обходятся ограничения. Но этот путь, возможно, не для всех.
  43. 1 балл
    IDEA + EmmyLua + Файлы заглушки для компонентов итд. https://www.dropbox.com/s/82yd0cebqabpiqi/src.rar?dl=0 Есть парсер доков в заглушки, но с косяками писал не я, сравните доки которые он умеет и те что дает вам components -l [component] > [filename] при необходимости уберите ; поставьте -- Пишу как если б это было java со всеми плюшками.
  44. 1 балл
    Это старая шутка. Намекает на бессмысленность действий, которые якобы содействуют некоторому процессу, но по факту ни на что не влияют. Об её происхождении я лишь догадываюсь. Помнится, в "Маленьком принце" Сента Экзюпери был король, повелевавший и Солнцем и звёздами. Например, он намеревался потребовать захода Солнца в семь часов сорок минут вечера. Не раньше и не позже, так как требовать нужно в благоприятный момент.
  45. 1 балл
    Теслы в индастриале. Турелька есть из OS, но слоупочная до невозможности, ей разве только коридоры простреливать. Дрона заюзать, чтобы он быстро подвозил к противнику и раскидывал уран. Дропперы с зельками тоже можно пользовать.
  46. 1 балл
    А вот и новый узконаправленный способ грифа
  47. 1 балл
    а вот хз. Я играю на рандомном сервере, щас попробую там проверить настройки приватов. Но мне кажется не блочится ничего, ведь ты просто тыкнул и все, а метка в любом случае повесится. Да, но если мне не изменяет память можно перемещать вещи только в соседний инвентарь, тоесть в сундук что рядом стоит с тем сундуком к которому привязка прошла. Так что проще цикл с уничтожением и шустро валить P.S. @Alex да, эта штука вообще полностью игнорит приват
  48. 1 балл
    Зачастую на серверах с техносборками ставится базовая коллекция модов: IndustrialCraft BuildCraft OpenComputers Благодаря моду билдкрафта в мире генерируются озера нефти, особенно огромные они в море. Если у вас хватит терпения его выкачать и переработать в дизельное топливо, то наверняка появится вопрос, куда это топливо девать кроме как как в двигатели внутреннего сгорания. В моде IndustrialCraft есть очень интересный генератор со сложным крафтом - полужидкостный генератор. Его особенность в том, что он может вырабатывать из топлива 32 eu/t, но есть большая проблема, передавать в провода он может только 20 eu/t. Данная проблема проявляется только на сервере, в одиночке все нормально. Возможно это разработчики что-то напутали, или так задумано, или чьи-то кривые ручки не туда тыкнули в настройках сервера, однако с 1 ведра топлива можно легко получить 128000 eu. Если запустить его в автоматическом режиме, то он начнет работать импульсами - зарядка внутреннего буфера, отключение, передача 20 eu в провода, включение, зарядка внутреннего буфера ... и т.д Но при этом топливо будет расходоваться не полностью, а с огромными потерями. По 5 мл на запуск, что не есть хорошо. Поэтому буфер всегда должен быть свободен. А постоянно мониторить и вовремя сливать энергию может обычный компьютер из мода OpenComputers. Итак, представляю вашему вниманию автоматический контроллер полужидкостных генераторов на ОС. Я разделил программу для генераторов на 3 уровня. Везде используются разные программы, но они работают на одном и том же принципе. Выбирайте то, что вам больше по душе и вперед строить! Генератор высокого класса Делается чисто на декор и понты Для тех, у кого туго с ресурсами, предлагаю генератор среднего класса. Он не настолько красивый, графония вообще не имеет, но главное, что он довольно низок по потреблению памяти, а так-же скорость обработки данных в разы шустрее. Из минусов - он нессиметричный, хотя это уже дело вкуса каждого. При желании можете налепить батареек и будет вам симметрия. Ну и последний тип генератора - бюджетный на микроконтроллере. От остальных он отличается крайне дешевыми компонентами, хотя со сборкой придется повозиться. Вот такие интересные получились контроллеры полужидкостных реакторов. Качайте нефть скорее, её не так много во всем мире ...
  49. 1 балл
    Трехмерная печать в 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!
  50. 1 балл
    Программа позволяет рисовать блоками в воздухе при помощи командного блока подключённого через адаптер или дебаг-карты. В программе есть 8 блоков которыми можно рисовать. Также при выходе все блоки удаляются. Чтобы программа работала, надо включить поддержку командного блока в конфиге мода на 543 строке: # Whether to enable the command block driver. Enabling this allows # computers to set and execute commands via command blocks next to # adapter blocks. The commands are run using OC's general fake player. enableCommandBlockDriver=true Загрузка и использование: pastebin get 060LXELq blockpaint.lua Поставьте командный блок и адаптер вот в таком положении: или просто вставьте debug-карту в ваш компьютер Запускаете программу и рисуете! Обновление Добавлена поддержка debug-карты
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...