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

Лидеры


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

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

  1. 17 баллов
    Для тех, кто спешит: https://ocelot.fomalhaut.me/ На форуме давно мелькают упоминания Ocelot. Это эмулятор OpenComputers, который находится в разработке примерно с 2015 года, был несколько раз переписан и наконец увидел свет в закрытом альфа-тесте зимой 2018. Я немного отвлекся на другие проекты (привет Stem), но теперь возвращаюсь к разработке Ocelot, и с гордостью предствляю вам тизер-анонс и, по совместительству, открытый альфа-тест Ocelot. Ещё один эмулятор? Да. Будем честны. Нормального эмулятора OpenComputers не существует. Те что есть - полны костылей, не совсем соответствуют реальному моду, сложны в установке, заброшены... и так далее. Ocelot - это решение всех этих проблем. Основная идея Ocelot - взять уже существующий код мода OpenComputers, тщательно отделить всё не нужное (Майнкрафт), затем осторожно переписать то что получилось с поправкой на реалии эмулятора. Благодаря этому, Ocelot эмулирует OpenComputers с ранее невиданной точностью. Вплоть до того, что в эмуляторе могут встречаться те же самые баги, что и в моде. Что он умеет? Практически всё. В перспективе. Ocelot позволяет воссоздать схему любой сложности из любого количества блоков - мониторов, компьютеров (любой конфигурации), проводов, модемов и прочих компонентов. Он позволяет управлять скоростью работы компьютеров, позволяет изменять "игровое" время, ставить его на паузу, сохранять состояние работы компьютеров и потом возобновлять работу с любого сохранения. Сейчас доступен базовый набор компонентов и блоков. Это кабель, корпус компьютера, APU/CPU, плашки памяти, видеокарты, дата-карты, EEPROM, дискеты, жесткие диски (managed и unmanaged режимов), интернет-карта, линкед-карта, сетевая карта (проводная и безпроводная), редстоун-карта / блок и монитор. Список будет расширяться. В перспективе будет эмуляция всех блоков и компонентов стандартного OC, роботов, дронов, микроконтроллеров, серверных стоек, плюс эмуляция адаптера и интеграции с ванильными блоками и блоками других модов. Что можно потрогать? Ocelot задуман как модульный проект. А именно: Ocelot Brain Основа эмулятора - это библиотека Ocelot Brain. Она написана на Scala и может быть подключена к любому другому проекта на Scala (и, может быть, Java). Ocelot Brain - это как раз переработанный код OpenComputers в компактной и удобной форме. Отвечает за всю эмуляцию кода и компонентов, а также сохранение / загрузку проектов. Вы можете использовать его для своих проектов, можете помочь с разработкой и патчами. Проект открыт и доступен по адресу: https://gitlab.com/cc-ru/ocelot/ocelot-brain На данный момент Ocelot Brain актуален версии OpenComputers 1.7.4. Ocelot Online На основе проекта Ocelot Brain, в качестве демонстрации его возможностей, создается проект Ocelot Online. Ocelot Online это эмулятор OpenComputers в виде сайта. Да. Всё что вам нужно для его запуска - это открыть сайт. Ссылка: https://ocelot.fomalhaut.me/ Исходный код тоже доступен: https://gitlab.com/cc-ru/ocelot/ocelot-online Поскольку проект пока находится в альфа-релизе, большая часть возможностей закрыта. Доступен только один монитор на всех, который позволяет взаимодействовать с уже настроенным демо-проектом. Конфигурация проекта: Креативный корпус, CPU T3, видеокарта T3, две планки памяти T3.5, managed жесткий диск T3, unmanaged жёсткий T3, интернет карта, редстоун карта T2, дисковод с дискетой Open OS, монитор T2, клавиатура и EEPROM с Advanced Loader от товарища Luca_S. Отличия от стандартного OpenComputers: * В OpenOS уже установлен HPM. Благодаря этому можно быстро ставить разные программы через hpm install. * Вставка текста заменена с Insert на Ctrl + V. Браузер не дает изменить этот хоткей. * В редакторе edit кнопка выхода заменена на Ctrl + E. Стандартная комбинация юзается браузером для закрытия вкладок - и переопределить её нельзя по соображениям безопасности. * Иногда не печатаются стек-трейсы. Это последствия одного фикса против одного вредного эксплойта. Проблема уже сообщена разработчикам OC. Как только нормальный патч появится в OpenComputers - я пропатчу и Ocelot. * Вместо OpenOS EEPROM используется Advanced Loader. Это сделано для удобства и наглядности. * Не работает лок на пользователя - по понятным причинам. Ocelot Online должен так же работать на смартфонах. Однако возможно придется отключить T9 - он портит эвенты клавиатуры. В разработке находится более сложная версия, где все получат возможность зарегистрировать аккаунт и создавать личные проекты любой конфигурации. Но это дело будущего. Ocelot Desktop Это классический вариант эмулятора Ocelot в виде программы, которую можно скачать и запустить на любой операционной системе, где есть Java. Построен на Ocelot Brain и библиотеке LWJGL (как и сам майнкрафт). Разработкой занимается товарищ @LeshaInc. Я не буду спойлерить и рассказывать про его проект - если он захочет, сам расскажет. Альфа-тест Итак, дорогие пользователи, пишите ваши хотелки, сообщайте о багах, обо всем что работает не так как должно, и как в оригинальном OC. Я, со своей стороны, постараюсь проект не забрасывать, развивать и своевременно (или не очень) обновлять. Благодарности Над проектом также работали: @LeshaInc, @Laine_prikol, @Fingercomp и @MeXaN1cK. За что им огромное спасибо и респект. Не забудем также всех, кто помогал с альфа-тестированием, Сангара - за чудесный мод, и мейнтейнеров OpenComputers за то что его не забросили (всё ещё ждем от них фикс). Enjoy!
  2. 8 баллов
    Иногда, особенно когда вы занимаетесь строительством реакторов, необходимо очень много укрепленного камня. Можно конечно и вручную залить нужную территорию, но согласитесь, лучше когда за вас это все сделает кто-то еще. Итак представляю вашему вниманию небольшую автоматическую систему по производству укрепленного камня. Вам всего то надо обеспечить эту ферму (генератор укрепленного камня) железными лесами, песком и энергией. Перейдем к постройке: Главным центром всей постройки является робот. Его устройство рассмотрим позднее. Справа от робота необходимо установить любую зарядку для бура/ваджары. Ну или если вы совсем бедные, и планируется что робот будет работать киркой, то установите сундук. Слева от робота устанавливайте Жидкостный/Твердотельный наполняющий механизм. Он заправляет распылитель сразу, за 1 прогон. Это будет наполнитель для зарядки распылителя. Рядом с зарядником распылителя рекомендую установить еще один Жидкостный/Твердотельный наполняющий механизм, который будет генерировать сжатую пену. В слоты улучшения обязательно установите "Выталкиватель жидкости". С подачей воды и смеси думаю разберетесь сами. Не забываем выставить настройки в механизмах как показано на скрине: За роботом нужна зарядка, чтоб он мог работать вечно! И не забываем её стукнуть ключиком, чтоб не заморачиваться с рычагами. Конвертор энергии не забудьте подключить к энергобуферу (или можете не устанавливать его, провода из ИС2 с ОС коннектятся) Над роботом установите сундук, и желательно побольше. В него необходимо засыпать железные леса и песок. Учтите, на 1 блок укрепленного камня необходимо 1 железные леса и 1 песок. Автоматизация засыпания расходников, уже на вас. Под роботом распологается сундук в который будет ссыпаться укрепленный камень. Так как наш робот будет нереально дешевым, не забываем сделать подставку на которой будет готовиться ваш камушек. Рекомендую вообще оградить это место, чтоб ни курица ни игрок не залезли перед роботом (иначе распылитель запенит все в округе). Собственно это все что необходимо вам знать при постройке этой фермы. Переходим к роботу. Программу я сделал для двух типов роботов, простейший Т1 и супердешевый на eeprom. Простой робот-генератор укрепленного камня: Супердешевый робот-генератор укрепленного камня: Настоятельно не рекомендуется лезть перед роботом иначе рискуете получить такое Не лезте своими шаловливыми ручками в слоты к работающему роботу. Можете забрать готовый камень, но расходники не трогайте, так как скорость смены инструмента огромная, и если робот что-то не найдет, вам грозит быть залитым в пену. (смотри скрин выше) Одной заправки распылителя хватает на 80 применений, потом робот автоматически перезаряжает инструмент и распылитель. А в остальном данная ферма работает довольно стабильно и исправно. А рассказал вам о ферме Asior, фармите укрепленный камень, гоняйте кур от фермы и удачи в тяжком труде реактостроителя! P.S. Укрепленный камень выдерживает ядерный взрыв, но радиацию сдержать увы не сможет. Осторожнее.
  3. 7 баллов
    Доброго времени суток, дорогие друзья. Давно я ничего не постил на этой площадке. Сегодня я расскажу историю о том как мы с @FluttyProger решили создать простенькую игру на телефоны. Идея пришла к нам быстро. Я хотел что то про космос да и Флатти хотел воскресить какую то игру про космические войны, захваты планет, кланы-шмланы, но самое главное мы сошлись на том что это кликер. Все это мы и решили взять за основу, в итоге у нас вся графика мертвой игры, Флатти на пальцах пытается рассказать какая же офигенная была та игра и как мы ща все быстро соберем и будет у нас готовый продукт со своей аудиторией. Вроде все просто, мы делим обязанности, что я занимаюсь графикой и UI, а Флатти кодит. Буквально за пару часов из готовой графики, а так же дорисовки на скорую руку я склеиваю интерфейс в фотошопе чтоб понять что мне делать в Unity (да не сказал делать проект решили в Unity), результат ниже. Результат показал что графика, из-за того что мы вводим свои прокачки и механики, слегка вырвиглазная и нужно что то менять. Я начинаю делать новые спрайты для всех панелей прокачек и не могу попасть в стиль с готовыми кораблями, фонами и прочим(забыл сказать готовую графику я все же изменил в иллюстраторе чтоб не было проблем авторских). Флатти говорит и так сойдет, давать делать игру, но я не согласен и в наш "быстрый" проект добавляется задача "Новая графика". Не долго думая я решил что самой быстрой будет в производстве пиксельарт (и это ошибка) и взялся за работу, Флатти же в свою очередь создал сцену с Пепегой в которую можно было кликать и ждал. С горем пополам я склепал часть недографики и начал стоить каркас UI. Методом проб и ошибок создали что то похожее на изначальный план и Флатти начал кодить. Машина создания запустилась и мы думали что месяц и все будет готово. Но не тут то было, без ТЗ, без полного представления что мы хотим получить все стало ломаться, я делал очередную панель, описывал Флатти что она должна делать, он делал, я что то менял и все ломалось, прошел месяц мы продвинулись процентов на 30% и все стояло на месте, фиксили одно, ломалось другое, стало понятно что нам нужно как то структурировать нашу работу. Мы начали создавать карточки в Trello и все стало получше, мы совершили прорыв и игра была вроде как готова. Я тут понял что не рассказал о чем же игра. Мы решили создать кликер в котором игрок бы летел по космосу от планеты к планете, по пути встречая разных жителей космоса, мы сошлись на трех: Враги - их мы убиваем, Альянс и Учеными - с ними мы дружим и торгуем. Так как встречи разные, наделили корабль параметрами: Силой - для врага, Наукой - для Ученых и Технологиями - для Альянса. Так же сам корабль можно улучшить чтоб дольше летел, большее бил врага, больше денег добывать и тд. Но параметры это улучшение уникальное и влияет на улучшения корабля, а чтоб повысить параметр нужно нанять на планетах юнита нужного класса: Сила - Воин, Техн. - Инженер, Наука - Ученый. К этому всему добавили механику скиллов которые работают от местной "маны" - Нестабильной материи. Систему репутации чтоб игроки соревновались. Возможность капитану "выбирать" планету к которой лететь и еще всякие микроплюшки. От игры оживить которую мы хотели осталось только начало названия Galaxy и пару фонов. Так вот, игра почти готова, Флатти ловит жуков в игре, а я занялся проверкой баланса который мы наманьячили. И тут понеслось, как оказалось делать 100500 механик которые друг друга увеличивают и уменьшают от кучи условий в разных этапах развития игрока создавать было не лучшей идеей. Время шло я предлагал что изменить, Флатти менял, я тестил, мы плевались от результата и все по новой. И вот прошло полгода с начала создания "простого кликера" и мы все же релизнули его в Google Play, да так и не доведя баланс до идеала, да не с тем продуктом который мы задумывали, но все же с нашей игрой, и мне с Флатти хочется поделиться ею с вами. Половить тапки в свой адрес, а может и приятный фитбек. Спасибо большое за внимание! Ссылка на игру Galaxy Grinder Так же накидаю скинов с этапов создания игры.
  4. 5 баллов
  5. 4 балла
    Описание Этот небольшой программный комплекс(всего 3 файла) делает одну простую вещь: определяет, на какой блок смотрит игрок, в пределах некоторой области. Гифки для наглядности: Теперь перейдем к билду Нам нужен стандартный компьютер с дополнительно подключенными Соединенная плата, Геоанализатор, Glasses Terminal(не забудьте привязать и надеть очки) А также планшет со следующей начинкой: Можно использовать более дешевые компоненты, однако в контейнер улучшений нужно будет вставить Улучшение "Навигация", поэтому он должен быть 2 уровня. На оба устройства устанавливаем OpenOS. На планшет устанавливаем wtwtp_tool.lua wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/playerlook/wtwtp_tool.lua На компьютер устанавливаем wtwtp.lua и glasses.lua wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/playerlook/wtwtp.lua wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/playerlook/glasses.lua Редактируем в wtwtp_tool.lua строчку local cx,cy,cz = -1408,0,512 Вставляем свои координаты центра карты, используемой в апгрейде навигации Редактируем в wtwtp.lua строчки local geolyzerAbsolutePos = {-1408,5,512} local glassesAbsolutePos = {-1408,4,512} Вставляем свои координаты геоанализатора и терминала очков Запускаем wtwtp с аргументами x1,y1,z1,x2,y2,z2 соответствующие области вокруг геоанализатора, в которой мы хотим работать. Геоанализатор может скнаировать кубическую область во все стороны на расстоянии 32. Комп какое-то время будет сканировать блоки в заданной области и после вернется курсор терминала. Запускаем wtwtp_tool без аргументов и через долю секунды мы увидим, что блок, на который игрок смотрел игрок в момент выполнения wtwtp_tool, будет подсвечен. Запоздалый вопрос актуальности Наверное, некоторые читатели подумали: "а зачем же оно нужно?" Эту систему можно использовать в качестве инструмента интерактивного взаимодействия с миром для какой-то другой системы. Например, у меня есть идея "беспроводные трубы на дронах", в рамках нее таким инструментом можно указывать точки сбора и доставки.
  6. 4 балла
    Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья[1]. Можно покупать и т.п. возможности как в Daggerfall. И враги 3-хмерные тоже, и труп тоже 3д. Можно прыгать и т.п. Если играть за охрану дворца то надо слушаться командира, и защищать дворец от злого (имя я не придумал) и шпионов, партизанов эльфов, и ходит на набеги на когото из этих (эльфов, злого...). Ну а если за злого... то значит шпионы или партизаны эльфов иногда нападают, пользователь сам себе командир может делать что сам захочет прикажет своим войскам с ним самим напасть на дворец и пойдет в атаку. Всего в игре 4 зоны. Т.е. карта и на ней есть 4 зоны, 1 - зона людей (нейтрал), 2- зона императора (где дворец), 3-зона эльфов, 4 - зона злого... (в горах, там есть старый форт...) Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее... поставить протез. Сохранятся можно... P.S. Я джва года хочу такую игру.
  7. 4 балла
  8. 3 балла
    Приветствую всех любителей ядерки в индастриале! Это экспериментальная тема. В ней я предлагаю делиться своими мыслями о микроконтроле ядерных реакторов с помощью OpenComputers и совместными усилиями найти интересные решения. У меня есть ряд идей по теме, есть даже условно рабочие скрипты, но нет времени на то, чтобы обкатать эти идеи в различных условиях, доработать скрипты, и выложить подробный гайд, хотя и кусок гайда тоже имеется. А времени на доработку сейчас нет и пока не предвидится. Поэтому я планирую постепенно выкладывать различные идеи, куски гайдов, скрипты, слушать критику и встречные идеи. Не исключаю, что у кого-то есть идеи получше моих. Если какая-то идея будет достаточно разобрана в дискуссии, я попробую скомпилировать обсуждение в микрогайд, и опубликовать его отдельным постом. Ссылку на микрогайд я добавлю в шапку темы. Также написать микрогайд сможет любой желающий, желательно в этой теме. Ссылку я также добавлю. Если я вдруг забуду добавить, напомните мне кто-нибудь, можно прямо в этой теме. Что нам может дать этот формат? С одной стороны, сохранится живость и непринуждённость общения. Мы можем выражать мысли, как удобно каждому из участников. А с другой, мы можем фиксировать наши мысли в удобном для читателей виде. Кому-то покажется достаточным быстренько пройтись по ссылкам из шапки. А если гайды окажутся недостаточно ясными, читатель может внимательно почитать дискуссию и понять происхождение тех или иных выводов. Также всегда можно задать вопрос и возобновить обсуждение, а по результатам дополнить тот или иной гайд. Или даже добавить новый. Ещё одно замечание: я настаиваю на микрогайдах и ссылках на них из шапки. Одна идея – один микрогайд. Это упрощает чтение, особенно для тех, кто плохо знает предмет. Если тема разрастётся, а гайды так и не будут написаны, я планирую размещать ссылки на просто интересные мысли. Опять же, не возбраняется напомнить мне об этом. Что такое микроконтроль ядерных реакторов Industrial Craft и зачем он нужен?
  9. 3 балла
    Нус, обнова спустя 2 года. Начнем с того что я полностью переписал приложение и библиотеку к нему. Добавил поддержку door и roll-door контроллеров. Так же для англоговорящих добавил локализацию на два языка Добавил приложение в App Market MineOS и так же имеется версия в гитхабе https://github.com/FelixBanan/OpenSecurity На счет багов не уверен, наверняка затаились. Те кому не лень, и те кому оно нужно, прошу протестировать и написать если что-то не так. Спасибо. UPD: Кинул скрины в спойлеры
  10. 3 балла
    Всем привет. Представляю вам программу для почти полного управления дроном. Но сначала короткая предыстория: Из возможностей отмечу следующее: Перемещение по сторонам света без улучшения "Навигация"(Спасибо версии OC 1.7.3) Возвращение дрона к управляющему планшету(Компьютеру) Удалённый интерпретатор Привязка дрона к управляющему планшету(Почти полная невозможность угона) Красивый Динамичный интерфейс(Отображение заряда планшета, время, заряд дрона, уровень сигнала) Остальные функции можно найти в программе или в скриншотах. Установка: На планшет (Для обладателей интернет-карт): wget https://raw.githubusercontent.com/BrightYC/DRC/master/tablet.lua drc.lua Для дрона (Для обладателей интернет карт): wget https://raw.githubusercontent.com/BrightYC/DRC/master/drone.lua drc-flash.lua && flash -q drc-flash.lua drc.lua (Код без минификации: https://raw.githubusercontent.com/BrightYC/DRC/master/non-minify-drone.lua) После вынимаем биос и вставляем в дрона. Первый запуск: Первый запуск сопровождается привязкой дрона к порту(Порт можно увидеть открыв дрона) и адресу беспроводной карты. Из-за этого возможность угнать дрона стремится к нулю, так как для первичной настройки нужно стоять не дальше 5 блоков от дрона. Пишем: drc <порт дрона> После этого дрона невозможно угнать, если рядом никого не было и он не мог подслушать сообщение(Перезагрузка привязку не ломает) Пара скриншотов: Видео: P.S Процент справа от шкалы сигнала обозначает не силу сигнала, а мощность передатчиков на планшете с дроном(поэтому для корректной работы нужны одинаковые карты беспроводной сети) На этом всё, дань уважения дронам выполнена, теперь могу спать спокойно.
  11. 3 балла
  12. 3 балла
    Я, конечно, ни на что не намекаю, но за 23 дня дальше лицензии ничего не продвинулось :))
  13. 3 балла
    Ограничение памяти можно осуществить и в ванильном луа, если сделать свой аллокатор и передать его луа (она это умеет, что очень её красит). Персистентность из Eris для этого не нужна.
  14. 3 балла
    Скачать: https://cc-ru.gitlab.io/ocelot/ocelot-desktop/ocelot.jar (ограниченная демо версия) Можно двигать блоки мышкой, камеру средней кнопкой, открывать окна. Папка home по какой-то причине отсутствует, но можно установить OpenOS и создать ее вручную. Файлы сохраняются в папке save. Там какой то левый адрес, но это уже спрашивайте у Тоторы, он делал ядро. Комплектация как в онлайн версии, можно, например, сделать hpm install pipedream (после установки OpenOS), затем наслаждаться картиной червей, поедающих монитор. На блок с компьютером не нажимайте, появится окно которое нельзя закрыть. Будет пофикшено в полной версии.
  15. 3 балла
    Я могу встроить что-нибудь типа Ocelot API в эмулятор. Типа глобальный объект ocelot который будет доступен везде из Луа и будет нести всякие dev-функции типа логирования. Ну а лог сам выводить куда угодно - в файл, в отдельное окно. Я тебя услышал. Попробуем что-нибудь типа профайлера прикрутить. Это задача непростая, но интересная. Тайминги должны быть если не идеально точными, то близкими.
  16. 3 балла
    Я тоже проверю свои телепатические способности. Речь, скорее всего, идёт об этой программе: https://github.com/ATastyPeanut/OpenComputers-Minecraft-Lua/blob/master/Ticks-Second-Tools/TPS-Holo-Display.lua Картинка тоже нашлась.
  17. 2 балла
    Возьмём недавний пост. Нас приглашают ввести команду. Вводим — и получаем какую-то абракадабру, программа не качается, и, вообще, печалька какая-то. А теперь копируем и вставляем в xxd: $ xclip -selection primary -o | xxd - 00000000: 6874 7470 73ef bbbf 3a2f 2f72 6177 2e67 https...://raw.g 00000010: 6974 6875 6275 7365 7263 6f6e 7465 6e74 ithubusercontent 00000020: 2e63 6f6d 2f68 6f68 7365 7267 312f 4f70 .com/hohserg1/Op 00000030: 656e 436f 6d70 7574 6572 7350 726f 6772 enComputersProgr 00000040: 616d 73ef bbbf 2f6d 6173 7465 722f 706c ams.../master/pl 00000050: 6179 6572 6c6f 6f6b efbb bf2f 676c 6173 ayerlook.../glas 00000060: 7365 73ef bbbf 2eef bbbf 6c75 61ef bbbf ses.......lua... 00000070: efbb bf Сказать, что я был ошарашен, — не сказать ничего. По какой-то причине в скопированной ссылке затесались неопознанные летающие байты EF BB BF. Вставляем в vim, который услужливо их опознаёт как U+FEFF. Это очень знакомый для меня символ, потому что им разбивают ники в IRC, чтобы не отослать случайный mention юзерам: 15:09:37 <@fingercomp> .u U+FEFF 15:09:37 <@brote> U+FEFF ZERO WIDTH NO-BREAK SPACE () Да, это неразрывный ZWS. На вид ожидаемо не влияет, но потому приносит жуткие страдания тем, кто не настолько шарит в юникоде и просто хочет запустить программу, — то есть целевой аудитории, насколько я могу понять. Зачем это сделано? Если причины нет, хотелось бы устранения этих диверсантов.
  18. 2 балла
    Насколько я понимаю, в OpenGlasses 2 можно в очки встроить геолизатор и апгрейд навигации, после чего на стороне моста вызывать getUserLookingAt(username: string) и получать в таблице под ключами x, y, z координаты блока. Клик регистрируется ивентами interact_world{,_block}_{right, left}. Но, пожалуй, для интерфейса проще даже рисовать на оверлее: кликать можно курсором, как в любом другом гуи.
  19. 2 балла
    Ну а завтра спросят дети, навещая нас с утра: "Папы, что сказали эти кандидаты в доктора?" Мы ответим нашим чадам правду, им не все равно: Удивительное рядом, но оно запрещено!
  20. 2 балла
    Насколько я помню, сам lightlevel=15 невозможен на стандартной детальке. Её нужно "заправить" светопылью(пкм по 3д-модельке)
  21. 2 балла
    Кажется, решил проблему: в конфиге мода был черный список адресов
  22. 2 балла
    Про микроконтроль-то понятно. Когда компания Локхид-Мартин запилила первый в мире стелс-истребитель F-117, из-за особенностей технологии стелса у него была такая форма, что он не мог летать нормально. Он тупо не аэродинамичен. Он как шкаф с крылышками. Создавал дикую турбуленцию и всё такое. Можете погуглить фоточки. Но он летал, и по отзывам пилотов был самым комфортным для пилотирования самолетом тех времен. А всё почему? Микроменеджмент. У него были самые современные на тот момент авиационные компы со спец. софтом, которые каждый момент времени занимался микроменеджментом положения самолетов. Чуть его поведет не туда - сразу двигается какой-то элерон, закрылок. И т.п. И так, с 24/7 контролем со стороны компа он и летал. И очень успешно летал. Так что идея-то понятна.
  23. 2 балла
    В папке сохранения с майном, по примерно такому пути - папка_майна/saves/сохранение/opencomputers/жёсткий_диск Чтобы узнать, какой жесткий диск какой - можно посмотреть первые 3 цифры в майне. Если играешь на сервере - только через пастебины.
  24. 2 балла
    Я пришёл сюда чтобы почитать как @Asior придумал свой никнейм. И решил написать свою историю. Она очень мелкая и расскажу я много лишней инфы чтобы она была хоть какая-то. В 2015 - 2017 я увлекался игрой Шарарам. И как то раз в 2016 я узнал о том что можно создать свой канал на Ютубе. И я сразу захотел делать видео угадайте про что) Так появился канал "Шарарам на Ютубе". В конце 2018 года я стал увлекаться майном как несколько лет назад. Стал увлекаться программированием. Хакингом. Видосами и ютубом и вообще всем что связано с компом. И я сделал канал. Как раз под названием АртХакер. Почему АртХакер? Потому что меня зовут Артур и канал посвящён компах и всём таком. А зачем я рассказал как создал канал "Шарарам на Ютубе"? Потому что я на создавал канал АртХакер я просто переименовал Шарарам на Ютубе на АртХакер и сменил оформление. Конец лол.
  25. 2 балла
    При программировании тяжёлых вычислений вроде шифрования RSA профайлер очень бы пригодился. Судя по описанию, тайминги в этом эмуляторе обещают очень точно соответствовать таймингам в игре.
  26. 2 балла
    Предложение фичи: некая глобальная функция вроде print, но печатающая в отдельный дебажный лог, внешний по отношению к OcelotBrain, и который чистится только явным нажатием определенной кнопки. Чтобы никакой код не мог испортить лог и чтобы лог тоже ни на что не влиял
  27. 2 балла
    file:///C:/Users/User/Downloads/Безымянный.png кто нибудь подскажет как он это сделал?
  28. 2 балла
    Нашёл древний код, не помню откуда: local c, fs = require("component"), require("filesystem") local gpu = c.gpu local TC, RO, RN, RD, TPS = 2, 0, 0, 0 gpu.setForeground(0x99b2f2) gpu.set(1, 2, "TPS Сервера:") local function time() local f = io.open("/tmp/TF", "w") f:write("test") f:close() return(fs.lastModified("/tmp/TF")) end while true do RO = time() os.sleep(TC) RN = time() RD = RN - RO TPS = 20000 * TC / RD TPS = string.sub(TPS, 1, 5) nTPS = tonumber(TPS) gpu.set(13, 2, " ") if nTPS <= 10 then gpu.setForeground(0xcc4c4c) elseif nTPS <= 15 then gpu.setForeground(0xf2b233) elseif nTPS > 15 then gpu.setForeground(0x7fcc19) end gpu.set(13, 2, TPS) end Надеюсь поможет
  29. 2 балла
    Немного переработал, починил один баг с микроконтроллерами (оказывается, у них по wake-up надо грузить прокси через assert, сильное колдунство) Добавил поддержку debug-card. Записал видосик с примером настройки. wget https://raw.githubusercontent.com/DOOBW/OC-GPS/master/usr/bin/gps.lua /bin/gps.lua && wget https://raw.githubusercontent.com/DOOBW/OC-GPS/master/usr/lib/gps.lua /lib/gps.lua
  30. 1 балл
    Представляю вам опять программу для робота, которая позволяет добывать руду, не лазая по пещерам. Робот, используя геолизер, может самостоятельно находить и добывать руду. Реализованы еще не все возможности, поэтому прошу тестировать и сообщать мне о багах. Требования: Корпус компьютера (уровень II или III) Апгрейд инвентарь (больше - лучше) Апгрейд контроллер инвентаря Жесткий диск EEPROM с прошитым Lua BIOS Геосканер Память (уровень I или выше) Процессор (любой) Апгрейд полета (I уровень) Алмазная кирка или аналогичный инструмент. Опционально: Апгрейд верстак Беспроводная сетевая карта Апгрейд батарея Апгрейд опыта Апгрейд чанклоадер Апгрейд генератор Апгрейд солнечная панель Эндерсундук из мода EnderStorage Установка: Скачать и сохранить файл как init.lua wget https://raw.githubusercontent.com/DOOBW/geominer/master/miner.lua init.lua Закинуть этот файл в корень диска. Добавить диск при сборке робота. Установить робота на платформу из твердых блоков. Дать роботу кирку. Поставить возле робота контейнер и зарядник. Нажать кнопку питания и наслаждаться процессом.
  31. 1 балл
    (проект в разработке) Цель данного проекта - создание нейросети и условий для ее самообучения. В идеале, это будет бомжовый робот минимальной комплектации (возможно даже без жесткого диска), который в зависимости от окружающих условий будет определять свою полезность. Также, он будет "программироваться" снаружи с помощью окружения оставленного другими роботами, формирующими "улей". Апогеем будет саморепликация. Кроме достижения цели, важен и процесс. Наблюдать за самообучением и выбором действий у нейросети очень интересно. Нейросеть изнутри: Мигающие точки - нейроны, линии - синапсы (связи), справа эмулятор мира майнкрафт на движке 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, веб-версия эмулятора
  32. 1 балл
    можно, но нет смысла, пропускной способности достаточно чтоб дрон моментально выполнял команду Да пожалуй так лучше
  33. 1 балл
    Так это целая программа. Она в открытом доступе. В основном, там есть таблица cmd = {} В ней есть функции. Я проверяю так: if cmd[commandFromTablet] then cmd[commandFromTable() end Да, я тоже думал что проще всего хранить весь код вообще на планшете, а на дроне только load() Но почему-то мне захотелось хранить основные функции в eeprom(Припоминаю, что рассчитывал на минимальное количество телодвижений, и чтобы программу спокойно можно было запустить просто скопировав ctrl+ v без докачки всякой ереси с инета) P.S Там modem.broadcast(), который всем виден. Лучше использовать modem.send, так как эти сообщения вообще никак нельзя отловить легальными слособами
  34. 1 балл
    Есть игра для мобилок - Event Horizon. Ей эпичности не занимать. Автор русскоязычный, насколько я понял. Вдруг сможете скооперироваться, потому и упоминаю эту игру
  35. 1 балл
    Про жидкостные реакторы было рассказано в этом гайде. Нет, охлаждение в жидкостном реакторе быстрее не идёт. И схема охлаждающих компонентов жидкостного реактора может вообще не отличаться от схемы обычного реактора. Обычный реактор генерирует обычную энергию (eu), а жидкостный тепловую (hu), которую требуется преобразовать в eu с помощью генераторов. В классическом реакторе тепловая энергия является проблемой, а в жидкостном основным продуктом. Причём, жидкостный реактор удваивает тепловую энергию на выходе. Например, теплоотвод выводит 20 hu/s, а реактор выдаёт 40 hu/s.
  36. 1 балл
  37. 1 балл
    Мой ник monkey. Я тоже попал в историю. Начал эволюционировать, осилил майнкафт и форум, скоро изучу lua. Такая история.
  38. 1 балл
  39. 1 балл
    Над выбором произвольной папки надо будет подумать. Я думаю сложностей не должно быть. Сейчас там сделано как в OC - есть папка save и в ней жесткие диски по адресам. С отключенной буферизацией можно работать прямо в этих папках, любым внешним редактором, как в OC. Насчет developer tools - хорошая мысль. Я тоже над этим думал. Эмулятор ведь дает возможность загляуть "под капот" комьютеру, потенциально. Как минимум - я могу динамически показывать загруженность проца, "бюджет вызовов", сколько занято оперативной памяти, лимит компонентов и т.п. Можно подумать над тем, какие именно инструменты могут понадобиться - какой-нибудь дебаггер-профайлер... хз. Короче да, спасибо за идеи - предлагайте ещё, не стесняйтесь. =) Все сделать не обещаем, но кое что обязательно попадет в релиз.
  40. 1 балл
    Если будут фичи, повышающие удобство разработки(например, выбор произвольной папки для содержимого жесткого диска или стак-трэйсы), то эмулятор будет лучше для разработки
  41. 1 балл
    Я могу эмулировать.
  42. 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! 😃
  43. 1 балл
    Не так давно решил я немного нафармить обсидиана, но прыгать по озерам лавы, тушить её водой, а потом долго и нудно собирать как-то не то. Хотелось автоматизировать этот процесс. Да есть специальные генераторы обсидиана, но там требуются расходники в виде красной пыли или другого горючего материала, что для меня было неприемлимо. Поэтому был собран первый прототип генератора обсидиана. Портатип генератора обсидианта Version 1.0 Довольно сложная но красивая конструкция. Время генерации 1 стака ~ 2 минуты 30 сек. Внешний вид: Инструкции по сборке: По времени работы меня такой результат вполне устраивал, но потом @Romanok2805 показал свою версию похожего генератора. Описывать его я не буду, поясню что смысл работы того генератора, он черпает ведром лаву из бочки, выливает её рядом с источником воды, меняет ведро на бур и разрушает обсидиан. И так по кругу. Обмозговав алгоритм его работы, был придуман улучшенный генератор обсидиана. Генератор обсидианта Version 2.0 Довольно легкая конструкция, дешевый робот. Время генерации 1 стака ~ 15 сек. Внешний вид: Инструкции по сборке: Генератор обсидиана Version 2.1 Довольно легкая конструкция, дорогой робот. Внешняя бочка не требуется. Время генерации 1 стака ~ 15 сек. Внешний вид: Инструкции по сборке: Генератор обсидиана промышленный Version 3.0 Дорогая конструкция, дорогой робот. Навешано чуть больше расчетов, в связи с чем время генерации обсидиана увеличено, но зато данный генератор может обновлять расходники. Время генерации 1 стака ~ 17 сек. Внешний вид: Инструкции по сборке: Собственно такие вот получились варианты сборки фермы обсидиана, я конечно хз зачем вам столько его потребуется, но, коль уж есть программа почему бы ею не воспользоваться. Всем удачи, копайте обсидиан быстрее, чем вам сосед P.S. Большое спасибо за демонстрацию и помощь в написании программы @Romanok2805, за информацию по багам @M_O_R_F_I_K
  44. 1 балл
  45. 1 балл
    Новые солнечные апгрейды(аддон к Opencomputers) выведут роботов на совершенно новый качественный уровень. Роботы станут почти автономными и смогут работать практически неограниченное время (если, конечно, робот будет проверять время суток, видимость неба и текущий заряд и вовремя всплывать на поверхность для подзарядки) Продвинутая, гибридная, ультимейт и квантовая панели обеспечат роботов и дронов неисчерпаемой энергией. Также аддон добавляет потрясающую и невиданную до сегодняшнего дня новую фичу - зарядку своих инструментов при необходимости прямо внутри инвентаря. Позитронный мозг робота/дрона программно уже сам сможет решить, по каким электрическим цепям ему в данный момент необходимо перенаправить могучие потоки энергии - в бур, в электро-краник для гевеи или в любой другой инструмент, который у него в инвентаре, или же в Главный аккумулятор, а при необходимости и направить всю свою мощь и энергию в миллионы ГВт для колоссального удара Теслой и разрушения на кварки всей живой материи в радиусе при опасности и при обнаружении врага на радаре. "Живучесть" и автономность роботов увеличивается на порядки. Также вы можете использовать своего робота в дальних путешествиях и просто дать ему подзарядить джетпак и свои квантовые или нано трусы, если они вдруг внезапно разрядились. Некоторые солнечные апгрейды, конечно же, не дешевые в крафте, но они того стоят. Роботы, наконец-то, шагнули в квантовую эру благодаря новым источникам энергии и новому аддону. Прощайте, архаичные ванильные угольные апгрейд-чайники. Вы хорошо послужили нам, но прогресс идет вперед. Уже приближается звук ударов иридиевых буров из шахт и слышится жужжание квантовых роботов и свист дронов. Замысел, геймдизайн: Alex Java кодинг: Neo
  46. 1 балл
    Дык любой аргумент исходит от субъекта бытия, от индивида, лишь пытающегося познать и осознать внешний объективный мир. Любой аргумент есть субъективизм
  47. 1 балл
    Я уже описал свое видение ситуации самим перечислением проблем. Если нужна конкретика, то: Упразднить правила. Чем больше запретов и ограничений - тем меньше желания их изучать, им подчиняться и следовать, тем больше желания найти более достойный игровой проект. Большая часть местных правил абсурдна донельзя и обоснована по принципу, схожему с воспитанием ребенка: "потому что я так сказал и так считаю верным". Сейчас не 2014 год, челядь постепенно умнеет, и подобный принцип уже "не канает" Реализовать систему демократичного саморегулирования (votemute, votekick и т.п.) для минимизации человеческого фактора в лице предвзятых модераторов, да и вообще автоматизировать большинство модерационных процессов, как это сделано на всяких вортексах, террафирмах, экскалибурах и прочих. И только попробуй, @moderator, сказать что-нибудь насчет рекламы сторонних сервисов, смешно уже Разработать универсальный самописный гуишный мод для покупки донат-шмота, привата, чтения правил и инфы об ивентах, интеграции с сошл медиа и для минимизации локальных серверных чат-команд, как это сделано на дримаче. Если нет соответствующих навыков мододела - максимально кастомизировать существующие плагины для удобства или написать собственные Свести к минимуму искусственные ограничения контента, доступного "из коробки", не вводить собственных механик для кастомизации привычного геймплея с наиболее популярными модами, либо вводить их на высшем уровне с переписыванием мода и подробными интерфейсными гайдлайнами вместо "you don't allowed to do that" Вместо запрета имбалансного шмота, дюп-шмота или лаго-шмота писать фиксы модов самостоятельно или заказывать их на форж-форумах Мини-игры, регулярные ивенты и любые средства массового развлечения с системой поощрения победителей ДОЛЖНЫ присутствовать на любом сервере, заинтересованном в своей аудитории и привлечении новой. Старперам и олдфагам, возможно, подобное кажется глупым, однако школьники с толстыми кошельками категорически не согласятся Ни в коем случае не наказывать игроков за багоюз, а наоборот щедро поощрять рапортующих и публично афишировать свои намерения о поощрении. Недочеты и геймплейные дыры - это неучтенный фактор, ответственность за который лежит на плечах администрации. Фиксы, фиксы и еще раз фиксы Создать грамотную донат-систему и уметь играть в маркетолога, способного "продать воздух", не перегибая при этом палку. Максимально кастомизировать привилегии донатеров вплоть до emoji в чате и воспроизведения кастомных звуков а-ля дота+, создавать модели именного оружия и брони, разыгрывать их в местных рулетках и ивентах, просторы творчества тут бесконечны Наконец, необходим современный информативный сайт с картой сервера, донат-разделом, техподдержой в реальном времени и, в качестве приятного дополнения, форумными фичами, наградами и т.п. Но никак не классический форум с фиг-пойми-где запрятанной инфой а-ля 2000-ые в современной обертке Подытоживая, скажу, что ваша аудитория - это ваш хлеб, ваша честь и слава, ваша популярность. Поиграв на данном проекте, я увидел если не наплевательское, то, как минимум, безразличное к ней отношение с позицией "соблюдай правила или катись" вместо "клиенты - наше все, мы стремимся максимально адаптироваться и идти навстречу каждому". Зато как кодерский русскоязычный форум для ценителей узкой специфики он хорош, да, не спорю.
  48. 1 балл
    Собсна, предложение о поддержке подключения к реальному FTP-серверу на уровне ОС реализовано. В проводнике появилась опция ввода адреса/порта/пользователя/пароля, после чего вы сможете взаимодействовать с удаленной машиной так же, как и с любой файловой системой из мода. Поддержка внутриигровых модемов для обмена файлами по сети также осталась:
  49. 1 балл
    Играл недавно в довольно старую стратегию и понял, что такое управление какое есть не особо удобное. У ИИ есть преимущество в обработки информации и расстановки войск таким образом, чтобы они не шли друг за другом, а шли стеной и соответственно имели большое превосходство, имели бы свою настоящую максимальную скорость. По этому у меня возникла идея в создании игры в жанре стратегии, RTS, где было бы кастомное управление при помощи программирования. Например создать функции по анализированию карты и управлению войском, создание своих кнопок управления в специальных зданиях. Желательно, чтобы это осуществлялось на луа и хранилось в папке скриптов на стороне клиента. Но начать разработку мешает: лень, незнание как работают игры по сети, незнание нормальных языков программирования, незнание как обрабатывать столкновения и физику (в зависимости от того 2D или 3D игра), а ещё прочие трудности создания игр: где брать музыку и изображения. Не думайте, что перекладываю свои обязанности на других. Я бы и не рассказал про эту идею, если бы не попросили. В принципе тут была бы и около компьютерная тематика, и весёлое время препровождение и прочее о чём говорилось.
  50. 1 балл
    Если вы когда нибудь сталкивались с созданием серверов под OpenOS, вам знакома проблема блокирования всего компьютера. Его нельзя использовать, пока сервер не выключится. Некоторые придумывали свои велосипеды, которые запускали event.listen или event.ignore. Но не то это! Для таких вещей существует rc, в OpenOS. Сейчас я расскажу вам, что это за зверь, где он живет и зачем он нам. Немного теории Итак, все скрипты для rc хранятся в папочке /etc/rc.d/. Любой файл с расширением .lua, который находится там, является rc-скриптом. У такого скрипта все глобальные функции это команды. Запустить такую команду можно командой rc <имя скрипта, без расширения> <имя команды>. Например если мы создадим глобальную функцию start в файлике /etc/rc.d/test.lua, то запустив команду rc test start эта команда выполнится. Все просто. Получить список команд определенного скрипта можно при помощи команды rc <имя скрипта, без расширения>. Например так: rc test. RC сам создает некоторые команды, хотя мы их можем переопределить: enable/disable. Соответственно включают/выключают скрипт. Все включенные скрипты получат команду start при запуске компьютера. restart если есть start и stop. Перезапускает скрипт, то есть поочередно запускает stop и start. Каждый скрипт можно конфигурировать. Конфиг находится в /etc/rc.cfg. Формат файла прост: <имя скрипта> = <конфиг: все что угодно, таблица, текст, число> По сути это обычный луа-файл, все глобальные значения из которого считаются полями. Каждый скрипт может получить доступ к своему конфигу. Конфиг записывается в переменную args. С теорией покончено, приступим к практике! Практика Я предлагаю написать простой эхо-сервер. Он будет слушать определенный порт (из конфига), и отвечать на любое сообщение эхом. Начнем! Создадим файл /etc/rc,d/echo.lua, и начнем писать в нем код. Нам понадобятся некоторые переменные -- нам понадобятся библиотека event -- что бы установить свой обработчик событий local event = require("event") -- еще нам нужна библиотека computer -- что бы подключить компонент `modem` local component = require("component") -- будем считать количество ответов -- зачем? для диванных аналитиков конечно! local count = 0 -- будем хранить текущее положение -- что б никто не запустил случайно сервер два раза local started = false -- сюда запишем прокси модема, когда убедимся что он есть local modem -- а сюда запишем рабочий порт local port Создадим обработчик события modem_message. Он будет вызываться при каждом сообщении по сетевой карте. -- функция ниже будет запускаться -- при каждом сообщении по сетевой плате local function onModemMessage(_, _, snd, prt, _, ...) -- `_` в нашем понимании - неиспользуемый аргумент -- если порт сообщения не совпадает с портом -- из конфига, выходим print(prt) if prt ~= port then return end -- добавим еденицу к счетчику count = count + 1 -- здесь мы уверены, что modem существует -- так как обработчик поставится только если у нас есть модем modem.send(snd, prt, ...) -- / | \ -- получатель, порт, данные -- просто напросто пересылаем отправителю то что он -- отправил нам =) end Теперь мы добавим команду start, которая запустит наш сервер. -- функция ниже глобальная, `local` нет. -- потому _rc_ ее будет смело считать командой -- а команда эта будет запускать наш сервер function start() -- мы должны проверить, есть ли у нашего сервера -- сетевая карта if not component.isAvailable("modem") then -- если ее нет, мы выводим ошибку и выходим io.stderr:write("Сетевая карта не найдена!") return end -- еще нам нужно проверить, выключены ли мы -- если это не так, снова ошибка if started then io.stderr:write("Сервер уже запущен!") return end count = 0 -- сбросим счетчик started = true -- теперь мы знаем, что с этого момента -- сервер включен. port = args or 666 -- args это переменная, в которую _rc_ запишет данные из конфига -- конфиг находится в /etc/rc.cfg -- но если в конфиге порт не настроен, используем дефолтный modem = component.modem -- мы проверили, что модем существует, -- поэтому смело его подключаем -- откроем порт modem.open(port) -- нам нужно сделать так, что бы все сообщения -- по сетевой карте обслуживались нашей функцией event.listen("modem_message", onModemMessage) -- ну а теперь мы точно включились! end Куда без команды stop? Добавим ее! -- эта функция тоже глобальная, поэтому считаем ее командой -- эта команда остановит сервер function stop() -- мы должны проверить, включен ли вообще сервер -- если он не включен, какой толк его выключать, верно? if not started then -- если он не включен, выводим ошибку и выходим io.stderr:write("Сервер уже выключен!") return end count = 0 -- опять же сбрасываем счетчик started = false -- запоминаем, что теперь -- сервер выключен -- теперь нам нужно по-настоящему выключить сервер event.ignore("modem_message", onModemMessage) -- все! с этого момента сервер выключен, и не принимает сообщение end Еще самая малость, добавим команду printCount, которая будет отображать количество полученных сообщений. -- и это тоже команда, думаю вы понимаете -- а эта команда напишет количество отправленных сообщений function printCount() -- выводить информацию будем только если сервер не запущен -- поэтому выведем ошибку, если он не включен if not started then io.stderr:write("Сервер выключен!") return end print(count) -- пишем количество подключений -- диванные аналитики ликуют! end Ну вот и все, программа сделана, диванные аналитики ликуют, инженеры недоумевают. Полный код: Время QA! Симулируем Васю Пупкина... А вот уже на другом компьютере отправлено сообщение на работающий сервер. Счетчик тоже работает. Установим значение в конфиге. Проверим... Все работает, инженеры ликуют! Такую систему очень удобно использовать для всяческих серверов. Сервер может спокойно работать в фоне, а в главном потоке спокойно можно запускать консоль сервера, интерпретатор луа, rm -rf / ... Enjoy!
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...