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

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

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

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

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

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


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Архив

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

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


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

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


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

  • Начать

    Конец


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

  • Начать

    Конец


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

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

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

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

  1. Маловероятно, что сейчас кто либо продолжает использовать компьютеркрафт, но вдруг. В процессе игры мне понадобилось осуществлять связь между компьютером OC и CC. Так как я не нашёл адекватного способа передачи данных, то придумал костыль. Костыль заключается в передаче данных (на данный момент — строк, если нужно будет передавать что-то другое, то допишу) через... установку и чтение цвета золотого монитора. Код: Использование: Демонстрация: Надеюсь, что кому-то это может пригодиться.
  2. В связи с тем что компоновка OT мне не нравится, было решено сделать ребрендинг ОТ. Фичи из ОТ будут перенесены и доработаны, не все конечно. Здесь мы будет информировать вас о грядущих обновлениях, здесь принимаем фидбек, идеи, баги, так же можем иногда выкладывать видео-ролики с интересными фичами мода, например как этот ниже. Разработчики мода: @NEO @vx13 Большое спасибо @LeshaInc за модель солнечной панели. GitLab: https://gitlab.com/Moon1Light/oma Сырая версия для ознакомления .
  3. Эта программа состоит из двух частей: Создание картинки: https://pastebin.com/ff1zwCDQ Отрисовка картинок: https://pastebin.com/tJHPS9NB Для создания баннера надо: 1. Запустить программу. Первый аргумент - путь, куда баннер будет сохраняться. Пример запуска: banner.lua path_to_banner 2. Кликнуть в любом месте (для распознавания владельца). 3. Щёлкнуть правой кнопкой мышки, чтобы перейти в режим редактирования. В режиме редактирования: Клик левой кнопкой мыши на пустом месте создаёт новое текстовое поле. Клик левой кнопкой мыши на каком-то поле выберет его (фон под ним подсветится). При нажатии клавиш текст добавляется в выбранное поле. Работает Backspace. Цвет текста в выделенном поле можно поменять табуляцией (есть палитра из 12 цветов). Если ничего не выделено, то поменяется цвет фона. Перемещается поле стрелками, удаляется кнопкой Delete. В любой момент программу можно закрыть (Ctrl-C), сохранения автоматические. Программу нужно запускать с аргументами: первый отвечает за частоту смены картинки (в секундах), следующие - пути, где картинки лежат. Например: banner_show.lua 5 path_to_banner1 path_to_banner2 Закрывается тоже по Ctrl-C. Обо всех багах и предложениях просьба сообщать сюда.
  4. Примитивная Операционная Система для слабых компьютеров Возможности: Простое API для быстрого и лёгкого написания своих программ (Документация: в розработке) Удобный Файловый менеджер для работы с файлами и папками Наличие редактора кода (Больше не знаю, что еще сказать, но думаю вы всё поняли) Кнопки: Стрелки Вверх и Вниз - навигация по файлам Enter - запустить програму, или открыть папку Tab - переключения по доступным дискам (дискетам) Alt - Открыть системное меню Ctrl - Открыть меню файла/папки (в текстовом редакторе - меню сохранения) Системные требования: Корпус компьютера, екран - 1 Tier Процесор - 1 Tier Видеокарта - 1 Tier Память - 1.5 Tier (x1) Жерсткий диск - 1 Tier Дисковод, клавиатура, Lua BIOS - должны присутствовать Установка: Вставляете чистую дискету в комп (с OpenOS) Вводите команду в консоль: pastebin run ngQT9YF8 Выбираете пустую дискету из спика файловых систем Когда всё будет готово - вынимаете теперь уже инсталлер данной ОС Собираете слабый комп и устанавливаете ОС с дискеты Буду рад отзывам, которые помогут мне улучшать систему. Скриншоты: Внимание! Просмотр кода может вызвать побочные ефекты: ужас, стыд, депрессия, потеря сознания
  5. Предисловие Я думал на новый сервер запилить прогу — мост между чатом сервера и IRC. У меня уже были такие программки: я насчитал минимум 6 различных версий мостов — каждая была немного переделанным клиентом IRC, который на дискете встроенной есть. Понять, в чём разница, даже с вимдиффом было сложно. Потому я плюнул и решил запилить полноценную ирколибу с красивой апишкой. Как это выглядит Вот полный код бота — моста. Сто двадцать шесть строчек. Прокомментирую некоторые из них. ① Подключаем либу и для укорачивания имён ещё вытаскиваем events, в которых хранятся все ивенты и priority. ② Создаем клиент с помощью билдера. ③ Через :connection задаём настройки соединения. Самое важное — адрес иркосервера. Порт обязателен. ④ Ирколиба знает меру в флуде. Опасаться, что бота выкосит флуд-фильтром, можно гораздо меньше. Это опционально, конечно. ⑤ Задаём ник бота, юзернейм и реалнейм. Юзернейм виден в хосте (nickname!username@domain.name), а реалнейм пишется в /whois. ⑥ Ирколиба умеет авторизовываться на сервере. Тоже опционально. ⑦ Эта группа выделена для ботоводческих настроек. Но пока там единственная опция — в какие каналы автоматически заходить. ⑧ Здесь задаются настройки исполнения. Опция threaded, по дефолту включённая, запустит бота в отдельном треде. Опция reconnect, также включённая по умолчанию, заставит бота переподключиться к серверу, если отвалится от него. Опция catchErrors перехватит ошибки в пользовательких листнерах; она отключена по умолчанию, чтобы не смущать. ⑨ Бот генерит ивенты для каждого сообщения. Так мы задаём обработчик для ивента. К слову, вместо функции здесь может быть корутина. ⑩ Есть и другие события. Например, irc.events.client.connected означает, что клиент соединился с сервером. А irc.events.client.authenticated говорит, что теперь можно слать сообщения. ⑪ Когда мы закончили конфигурировать бота, собираем через :build(). Если вместо него вызвать :buildAndRun(), бот тут же ещё и запустится. ⑫ Для удобства создадим ещё один тред, где будем работать с чатбоксом и ждать ^C. ⑬ Запускаем бота. Затем ждём завершения любого из двух потоков. ⑭ Когда это произошло, мы выключаем клиент, если он ещё подключен: тот выйдет с сообщением "Quitting." ⑮ Наконец, принудительно останавливаем потоки. На всякий случай. Красота ведь. Репозиторий Репа либы — на нашем гитлабе. Там же есть примеры использования и документация с описанием всего. Наконец, версия 1.0.0 лежит на хеле. Из-за баги в OC хпм крашиться может (фиксить лень), но можно попробовать скачать: $ hpm install libirc
  6. Помните мост Рида? Ну так вот. Я тут изучаю 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! 😃
  7. Эта кoпалка не требует для рабoты лишних деталей, т. к. кoд запиcываетcя на EEPROM. При cбoрке рoбoта, вмеcтo ЖД, мoнитoра и клавиатуры мoжнo дoбавить чтo-тo дейcтвительнo нужнoе, например раcширение инвентаря или аккумулятoра. Требoвания: Инвентарь (чем бoльше - тем лучше) Кoнтрoллер инвентаря. Геocканер. Инcтрумент, врoде алмазнoгo или иридиевoгo бура. Хoвер-апгрейд (еcли неoбхoдимo) При cбoрке мoжнo дoбавить: Апгрейд-верcтак. (пoзвoляет экoнoмить меcтo) Чанклoадер. Генератoр. (при наличии чанклoадера реже будет неoбхoдимocть ездить к заряднику) Беcпрoвoдную cетевую карту. (пoзвoлит рoбoту oтправлять cтатуcные cooбщения) Пример минимальнoй и пoчти макcимальнoй cбoрки (при желании, мoжнo дoбавить раcширения) Иcпoльзoвать oчень прocтo: В кoмпьютер c интернет-платoй вcтавить EEPROM. Запуcтить кoманду pastebin get eFkAZP0u b && edit b && flash b -q && rm b Пo желанию, редактирoвать параметры - первые переменные этo кoличеcтвo нoд, минимальная плoтнocть, макcимальная плoтнocть, выcoта (неoбхoдимo указывать для мирoв, в кoтoрых нет бедрoка), пoрт, cпиcoк oтхoдoв. Сoхранить/закрыть файл. Дocтать EEPROM из кoмпьютера и вcтавить в рoбoта. Выдвинутьcя на меcтo дoбычи. Пocтавить рoбoта. Дать рoбoту бур. Пocтавить вoзле негo кoнтейнер и включенный зарядник. Включить рoбoта и ждать завершения рабoты. Функциoнал: Рoбoт cканирует квадраты x8 блoкoв пo гoризoнтали, пocтепеннo oпуcкаяcь вниз. Дoбывает блoки из заданнoгo диапазoна плoтнocтей. Дoйдя дo бедрoка, рoбoт пoднимаетcя на cтартoвую выcoту и перехoдит к cледующей кoлoнне. При низкoм урoвне заряда аккумулятoра, пытаетcя заправить генератoр (еcли имеетcя), в прoтивнoм cлучае или при низкoм урoвне заряда инcтрумента, oтправляетcя на cтартoвую пoзицию, к заряднику. Так же, при запoлнении инвентаря, cбраcывает муcoр, при наличии верcтака упакoвывает реcурcы в блoки и еcли меcта вcе-равнo малo, тo cледует к кoнтейнеру, cбраcывает лут и вoзвращаетcя к рабoте. Еcли имеетcя чанклoадер, тo при начале рабoты oн включаетcя, а при завершении выключаетcя. Еcли имеетcя беcпрoвoднoй мoдем, тo рoбoт пocылает cтатуcные cooбщения: 0 - неразрушимый блок (скорее всего - приват) 1 - контейнер заполнен 2 - контейнер отсутствует 3 - зарядка инструмента 4 - заправка генератора 5 - конец работы
  8. Я недавно выложил IRC-либу, которую я делал, чтобы собирать IRC-мост. Теперь я собрал и мост. Установка Соберите компьютер с интернет-платой, кучей памяти (на всякий случай), админ-чатбоксом из OpenTechnology и дебаг-картой (через неё онлайн получает прога). Поставьте на него OpenOS. Пропишите следующие команды: mkdir -p /home/bin wget https://gist.githubusercontent.com/Fingercomp/df483bc2cefa13e0422d656ae82495ac/raw/c8617e01b7baa0e47936300fd9e783afa36601cb/irc-bridge.lua /home/bin/irc-bridge.lua Скачайте и установите IRC-либу. Например, так: mkdir -p /home/lib/irc /home/lib/irc/client /home/lib/irc/event /home/lib/irc/protocol cd /home/lib/irc set ADDR=https://gitlab.com/cc-ru/irc-oc/-/raw/v1.1.0/irc wget $ADDR/init.lua init.lua wget $ADDR/enum.lua enum.lua wget $ADDR/state.lua state.lua wget $ADDR/throttlingScheduler.lua throttlingScheduler.lua wget $ADDR/client/init.lua client/init.lua wget $ADDR/client/handlers.lua client/handlers.lua wget $ADDR/event/init.lua event/init.lua wget $ADDR/event/bus.lua event/bus.lua wget $ADDR/protocol/init.lua protocol/init.lua wget $ADDR/protocol/isupport.lua protocol/isupport.lua wget $ADDR/protocol/capabilities.lua protocol/capabilities.lua wget $ADDR/protocol/splitter.lua protocol/splitter.lua Запустите мост, чтобы он создал конфиг-файл: irc-bridge Откройте файл /etc/conversationalist.cfg. Там будет сериализованная Lua-таблица (не самый лучший формат конфига, согласен). Найдите и поменяйте следующие настройки: channel — канал, к которому подключаться nickname — ник бота в ирке account — имя аккаунта бота в ирке (можно в nil поставить, если нет) accountPassword — пароль от акка (также в nil поставить, если нет) gameAdmins или ircAdmins — в таблицу впишите себя, чтобы можно было конфигать Всё. Мост поставлен. Команды Мост воспринимает команды. Чтобы выполнить команду, например pm on: Пропишите в игре: #IRC: pm on Пропишите в ирке: /notice @<имя канала> pm on (например, /notice @#cc.ru-server1 pm on). Список команд: online — показать онлайн на другом конце моста. pm on — разрешить с другого конца моста слать вам ЛС. pm off — запретить слать вам ЛС. pm — показать, могут ли вам послать ЛС (в ирке включено по умолчанию, а в игре выключено и надо включать самому). msg <имя> <сообщение>: отправить ЛС юзеру на другом конце моста. pm ignore list — показать список игнорируемых юзеров. pm ignore add <имя> — добавить кого-то в этот список. pm ignore del <имя> — вытащить кого-то из него. Админы могут выполнять ещё такие команды: irc admin list — показать список админов в ирке. irc admin add <имя> — добавить кого-то в этот список. irc admin del <имя> — убрать кого-то из него. mc admin list, mc admin add <имя> и mc admin del <имя> — аналогично, но работает со списком админов в игре. irc whitelist list — показать список юзеров, которые могут слать сообщения в игру. irc whiltelist add <имя> — добавить кого-то в список. irc whiltelist del <имя> — убрать кого-то из него. mc blacklist list, mc blacklist add <имя>, mc blacklist del <имя> — аналогично, но работает со списоком тех, чьи сообщения не будут слаться в ирку. irc alias set <имя> <алиас> — установить алиас юзеру. Когда он будет писать сообщения в игру, его имя будет заменено на алиас. irc alias get <имя> — показать алиас для юзера. debug on — включить режим дебага. Мост будет писать весь трафик с IRC на экран. Полезно, чтобы узнать, почему тупит мост. Пароли будут показаны плейнтекстом, поэтому лучше оставить выключенным, хотя бы во время подключения. debug off — выключить этот режим. debug — показать, включён ли дебаг. Как это выглядит На мониторе будет рисоваться вот такое: Как можно догадаться, чтобы мост остановить, нужно нажать Ctrl-C. Ссылки Код на гисте: https://gist.github.com/Fingercomp/df483bc2cefa13e0422d656ae82495ac/
  9. Столкнулся с задачей проверить, какой инструмент у робота в "руке". Судя по API, такого метода нет (или я невнимательно читал). Какие есть варианты решения? Я рассматривал вариант экипировать что-то другое из инвентаря и посмотреть, что появилось в слоте инвентаря, но это жуткий костыль.
  10. 8urton

    Beep Tracker

    Версия для OpenOS: HEL Repository Standalone версия (для хардкорщиков): (еще портируеться...) Системние требования: минимальные Программа представляет из себя простенький монофонический трекер (редактор мелодий) для стандартной пищалки из Opencomputers. Доступно 256 строков и где-то 5 октав (A0 - B6) из за ограниченого диапазона частот динамика (20 - 2000 Гц). Из недостатков могу упомянуть: Нельзя остановить мелодию во время проигрывания. Нельзя изменить темп Максимальная длительность трека - 16 секунд (хотя это можна исправить) Планы на будущее: Замутить мини-библиотеку, чтобы была возможность использовать мелодии в своих программах Начать грызть и изучать звуковые карты из CX и написать более продвинутый трекер Клавиши: Up, Down - навигация по дорожке Left, Right - уменьшить/увеличить октаву Space - Поставить паузу на дорожке Delete - Удалить ноту F1 - Помощь Расположение нот на клавиатуре:
  11. Вступление: Решил я на днях написать хорошую IDE для OpenComputers и столкнулся с тем, что в ванильной OpenOS напрочь отсутствует подсветка синтаксиса. Надо это исправить! Если найдутся какие-либо недочеты в плане правильности подсветки - пишите, пофиксим. Скачать библиотеку: https://github.com/IgorTimofeev/MineOS/blob/2967e780d35c2e4363dd7fe81de5ba78310c3d55/lib/oldSyntax.lua Инструкция по использованию: --Подключаем библиотеку local syntax = require("syntax") --Создаем любую строку с операторами lua local stroka = "while true do print(\"Hello world!\")" --x, y - стартовые координаты отрисовки текста. --limit - ограничение отрисовки по ширине строки. Зачем рисовать лишние пиксели? local x, y, limit = 2, 2, 20 --Выводим строку на экран в подсвеченном варианте syntax.highlightAndDraw(x, y, limit, stroka) На экране отобразится следующее: Другие функции: ● syntax.setColorScheme(цветовая схема) Устанавливает цветовую схему по выбору пользователя. На данный момент есть лишь две схемы: "midnight" и "sunrise". ● syntax.highlightFileForDebug(путь к файлу [,цветовая схема]) Открывает обычный файл по указанному пути и выводит его содержимое в подсвеченном виде на экран. Размер содержимого ограничен размером экрана. Пример использования этой функции предоставлен на самом первом скриношоте. Насчет оптимизации и ускорения: Я постарался минимизировать задержки в выполнении скрипта различными путями. Во-первых, отрисовка выполняется не попиксельно, а построчно. То есть если мы имеем строку красного цвета, то функция отрисовки выведет на экран сразу всю строку, а не каждый символ по отдельности. Во-вторых, цвет текста изменяется только тогда, когда это необходимо, а не каждый раз при смене символов. На данный момент у программы есть существенный минус: при отрисовке выполняется поиск совпадений шаблонов по строке через оператор string.find(), однако изначально он не дружит с юникодом. Поэтому пришлось использовать костыль unicode.find(), существенно замедляющий процесс поиска. Если у кого-то имеется более оптимизированный костыль или способ поиска по юникоду, буду крайне благодарен за помощь в этом деле. Для ясности прикладываю видосик: http://www.youtube.com/watch?v=T-f8jGdYO0M&feature=youtu.be Исходный код unicode.find(): function unicode.find(str, pattern, init, plain) if init then if init < 0 then init = -#unicode.sub(str,init) elseif init > 0 then init = #unicode.sub(str,1,init-1)+1 end end a, b = string.find(str, pattern, init, plain) if a then local ap,bp = str:sub(1,a-1), str:sub(a,b) a = unicode.len(ap)+1 b = a + unicode.len(bp)-1 return a,b else return a end end
  12. Новости по аддону. Тут принимаются идеи, баги, помощь. github: https://github.com/Avaja/OpenTechnology
  13. Некоторое время назад я публиковал программку - интернет-мост Stem. Он очень простой в использовании, но к сожалению пока не лишен некоторых глюков. А кроме того, у него есть недокументированные возможности. Предлагаю сейчас поиграться с одной такой тайной фичей. Это будет интересно тем, кто немного знаком с HTML/CSS/JavaScript. В чём суть? Всё просто. У Stem есть веб-клиент. То есть если вы зайдете по адресу https://stem.fomalhaut.me (например), вы увидите окно, которое пригласит вас ввести ID канала и початиться прямо с сайта. После ввода ID канала, вас перекинет на страничку с "чатом", где вы сможете посылать сообщения вашему компьютеру/роботу в майнкрафте. Адрес этой странички будет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test Где test это ID вашего канала. Когда робот будет вам отвечать, это будет видно в логе. Примерно так: А теперь - тайная фича. Находясь на страничке канала, как на скриншоте, вы можете приписать к адресу дополнительный флаг: &render=true. Полный адрес станет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test&render=true И начиная с этого момента, все входящие сообщения от компьютера в OpenComputers будут не отрисовываться в лог, а попадать в JS функцию eval(...). Что это значит? Те кто имел дело с JS уже наверное поняли все последствия. Но я поясню. Это значит, что компьютер OpenComputers может прислать сообщение с JS кодом, и сайт Stem этот код выполнит. А это значит, что вы можете творить на сайте вообще всё что угодно. Вы можете удалить интерфейс, показать вместо него новый, скачать что-то с инета, запустить игрушку... да хоть майнить крипту. Поиграем Ничего вредоносного мы делать конечно сейчас не будем. Вместо этого, традиционно, попробуем сделать так, что сайт Stem превратится в сайт для управления светом в нашем доме в Майнкрафте. Шаг первый. Подготовим дом. Тут всё просто - стандартный компьютер, с интернет картой, от него кабель к I/O блоку, а на блоке - подопытная лампа. На компьютер ставим Stem. Например, ставим HPM такой командой, pastebin run vf6upeAN И потом пишем: hpm install stem Нажимаем Enter и готово. Шаг второй. Нам нужен сайт. Усложнять не будем, и наш революционный дизайн будет выглядеть так: Что нам нужно сделать, чтобы сайт Stem превратился в то что нам надо? Методом тыка, через консоль браузера определяем, что достаточно выполнить такой код: document.body.innerHTML = " <style>button:active { background: #fac700; }</style> <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button> "; document.body.style.alignItems = "center"; Первой строкой мы просто заменяем всё содержимое тега <body> на то что нам надо. Я добавил еще немного косметики в виде стиля для кнопки. Вторая строка - тоже косметика, я просто поправил стиль на теге <body> чтобы кнопочка была посередине. Один важный ньюанс - на кнопке повешено свойство onclick с кодом sendMessage("toggle"). Таким образом, когда пользователь тыкнет по кнопке, мы отправим сообщение обратно в OpenComputers. Функцию sendMessage нам дает веб-клиент Stem. Ей можно безвозмездно пользоваться в своих целях. Шаг третий. Соединяем это все вместе. Теперь надо набросать программку для нашего компьютера в Майнкрафте, чтобы он выслал подготовленную JS-"бомбу" по нашему сигналу. Эники, беники... выходит что-то такое: local event = require('event') local stem = require('stem') local side = require('sides') local com = require('component') local redstone = com.isAvailable('redstone') and com.redstone or nil local channel = "test" local layout = [===[ document.body.innerHTML = "\ <style>button:active { background: #fac700; }</style>\ <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button>\ "; document.body.style.alignItems = "center"; ]===] local lampSide = side.top local lampTurnedOn = false print("Connecting to the #" .. channel .. " STEM channel...") local server = stem.connect('stem.fomalhaut.me') server:subscribe(channel) print("Done.") print("Press [q] to quit.") while true do local name, a, b = event.pull() if name == "stem_message" then local message = b if message == "connect" then print("Someone wants to connect - sending the layout...") server:send(channel, layout) elseif message == "toggle" then if redstone ~= nil then if not lampTurnedOn then redstone.setOutput(lampSide, 16) lampTurnedOn = true else redstone.setOutput(lampSide, 0) lampTurnedOn = false end end end elseif name == "key_down" then local char = b if char == 113 then break end end end server:disconnect() Я думаю тут большая часть очевидна и понятна. Мы подключаемся к серверу Stem, подписываемся на нужный канал и внимательно слушаем входящие сообщения. Когда пользователь присылает сообщение connect, мы отправляем ему подготовленный код, который мирно лежит в переменной layout. Этот код прилетит к пользователю, и, если пользователь смотрит страницу с включенной опцией render=true, код сработает и перерисует страницу. Если опция будет отключена - он просто увидит код в логе, как простое сообщение. Шаг четвертый. Тестируем. Откроем наш канал по ссылке: https://stem.fomalhaut.me/channel?id=test&render=true Появится пустой лог. Запустим программу в OpenComputers. Она отрисует наше приветствие, что-то вроде: Сonnecting to the #test STEM channel... Done. Press [q] to quit. Теперь пишем на сайте команду connect. Если мы все сделали правильно, и Stem не заглючил, интерфейс сайта исчез, и вместо него появилась наша кнопка. Нажимаем её. Вуаля! Дома зажегся свет. Постскриптум Это конечно же недокументированная хакерская фича, которую можно считать альфа-версией. Кроме того в Stem сейчас есть неуловимый баг, из за которого сообщения иногда не доходят. Не пугайтесь. Если кто-нибудь предоставит мне сценарий (прямо по шагам), при котором 100% срабатывает баг - буду очень рад и пофиксить его будет легче. С помощью описанной фишки можно придумать много хрени. Я показал самое простое что пришло в голову. Уверен, ваша фантазия будет покруче моей ) Пишите баг-репорты или пожелания по фиче, да и просто комменты в эту тему, либо мне в любой канал связи, где я онлайн.
  14. Можно ли скопировать id эффекта и записать на других нанороботов в определённый слот, Либо как-то самому записать положительный эффект?
  15. Для тех, кто спешит: 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!
  16. Микроконтроллеры - внешне однообразные блоки. Как на счет того, чтобы декорировать их? Иссью на гитхабе мода: https://github.com/MightyPirates/OpenComputers/issues/3216 Обсудим этот вопрос?)
  17. Exeteres

    TypeScript to Lua

    Вместо вступления: Я не считаю C-подобный синтаксис лучше синтаксиса lua и не буду заставлять вас переписывать все ваши программы на TypeScript! Я просто хочу поделится с вами альтернативой и рассказать про ее преимущества и недостатки. # Что такое TypeScript? TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений. Он создан для расширения JavaScript и он компилируется в JavaScript, но также существует инструмент для преобразования TypeScript кода в Lua. Вам может показаться, что этот транслятор крайне ограничен, но, поверьте мне, его возможности впечатляют. # Почему его стоит попробовать? Я сначала продемонстрирую некоторые возможности TypeScript графически, а потом подробно расскажу про установку и настройку необходимых инструментов. Я покажу вам далеко не все возможности TypeScript, а только самые основные и интересные. Из-за большого размера контент каждого раздела будет скрыт под спойлер. 1. Статический анализ 2. Автодополнение 3. ООП 4. Стандартная библиотека и возможности языка # Как это работает? Конечно же все не так просто. Компилятор просто так не узнает типы методов и полей объектов, с которыми мы будем работать. Для того, чтобы описать наше окружение необходимо написать так называемые файлы декларации или тайпинги. Хочу сразу вас обрадовать - это не ваша задача. Существует репозиторий с такими декларациями, в котором, на данный момент, существуют типы для большинства API и компонентов OpenOS и библиотеки GUI. От вас требуется только установить все необходимые инструменты и правильно их настроить. # Установка Редактор кода Вы можете использовать любой редактор кода с поддержкой TypeScript. Я рекомендую VSCode, который поддерживает его из коробки. NodeJS Он необходим нам для установки необходимых пакетов (он поставляется с пакетным менеджером npm) и для запуска транспилера. Вы можете скачать последнюю стабильную версию с официального сайта. Использование плагина для VSCode (рекомендуется): Создание проекта вручную: Для компиляции используйте команду npm run build. Сгенерированные lua файлы появятся в папке dist. # Что дальше? Дальше, если вас действительно заинтересовал TypeScript, вы можете подробнее ознакомиться с языком и транспилером. Ссылки на документацию я оставлю ниже. Прошу также отписаться в тему по поводу гайда, инструментов, тайпингов и вообще высказать ваше мнение. Гайд достаточно сырой и его необходимо будет доработать, надеюсь на вашу помощь. Кроме того, я постараюсь ответить на все ваши вопросы и помочь с решением проблем, возникших при установке, настройке и использовании. # Ссылки Официальный сайт и документация TypeScript (англ) Серия русских статей по TypeScript TypeScriptToLua Wiki (англ) Тайпинги
  18. Программа которая рисует ASCII логотип Debian(как прогрмма neofetch) Можете добавить программу в автозагрузку Можно скачать исходный код следующей командой(Для GNU/Linux): wget https://raw.githubusercontent.com/maxutka99/OpenComputersSoft/master/loader.lua Требования: Если хотите скачать программу с Pastebin требуется Интернет карта Если будете переносить программу на компьютер методом CTRL+C CTRL+V подойдёт самый минимальный 1 тира Установка: pastebin get Yi7mhxTq loader.lua Запуск: loader.lua Авторы: @maxutka99 - написание программы, рисование логотипа Debian (копирование из neofetch) @maks12345 - подсказал как правильно пишется Debian GNU/Linux --------------------------------------------
  19. В этом посте, я попробую ответить максимально подробно на вопрос - "какие OS существуют в OpenComputers?". Короткий ответ, если вам лень читать весь пост: "юзабельная только одна - OpenOS". Итак, какие варианты у нас есть? Юзабельные OpenOS Это дефолтная операционная система мода. Она же самая распространённая (99.9(9) охвата компьютеров в OC). Написана хорошим чуваком из Германии, по имени Sangar, который разработал и сам мод OC. То что вы видите, собрав и запустив компьютер по гайду с вики - это она и есть. Небольшой motd ("совет дня") сверху, и консоль, готовая к выполнению команд. По стилю она напоминает Linux. Легко дописывается и модифицируется под свои нужды. Работает на компьютерах, серверах, планшетах и роботах. Гайд по теме от Fingercomp. MineOS Альтернативная операционная система с мощной графической оболочкой и собственным "магазином" приложений. Приложения во многом совместимы с OpenOS, отличия в основном в комплекте стандартных библиотек. Ну и в части UI разумеется. Выглядит красиво, и чувствуется явное влияние macOS. Plan9k Аллюзия на реально существующую систему Plan 9. Поставляется вместе с модом, как и OpenOS, и может быть найдена на лутовых дискетах. Основные фичи системы: * Многозадачность * Поддержка нескольких видеокарт/дисплеев * Пользовательское пространство отделено от ядра системы * Продвинутая работа с сетью * Фоновое выполнение программ Система идет в комплекте с мультизагрузчиком OpenLoader, который позволяет выбрать операционную систему для загрузки при старте компьютера. Согласно отзывам пользователей - система работает на последнем OC, но глючит. Если вам интересно на неё взглянуть - ставьте на свой страх и риск и удачи. 😃 SecureOS Безопасная система от Shuudoushi. Последний апдейт в мае 2016. Всего около 400 коммитов - неплохо! Автор предлагает более "UNIX-like" и защищённую версию OpenOS. Заявляется как "официальная система" аддона OpenSecurity. Обладает повышенными системными требованиями (видеокарта Т2, две планки памяти Т2). Решайте сами, стоит ли ваша безопасность того 😃 В разработке (отечественные) LunaOS Многозадачная OS от NightFury. Исходный код недоступен, разработка свёрнута. Упор делался на особую реализацию многозадачности и набор программ, использующих этот механизм. Например - ssh клиент, удалённый рабочий стол, репозиторий программ, raid и некий "кластер". ExOS Попытка создать "универсальную" OS от Syabro. В чём будет заключена универсальность, автор не признался. Разработка дальше флуда не пошла. В разработке (от иностранных коллег) daeOS Система от ds84182. Подробности автор не раскрывает, исходники не обновляются с 2015 года. miniOS Небольшая система от skyem123. Последнее обновление - в 2014 году. Автор утверждает, что система очень похожа на ранние версии MS-DOS. Ключевым преимуществом системы является её малая ресурсоёмкость. (Что и отражено в названии.) В запущеном состоянии она занимает около 90Кб оперативной памяти. Библиотеки системы минималистичны и сразу загружаются в память, при старте системы. Поэтому оператор require для их использования не потребуется. chaos: Entropy Taking Effect Операционная система от Alissa. Заявлены: * полная совместимость с OpenOS * установка с GitHub репозитория * пользовательское пространство отделено от системных файлов * структурированный по секциям man (доки) * переменные окружения задаются файлом Разработка была начата в этом году, однако исходники почему-то потёрты с GitHub. skex-BIOS Операционная система для дронов (прошивка EEPROM) от ShadowKatStudios. Не обновлялась с 2014 года, и сайт с кодом больше не доступен. А также Red OS Графическая оболочка для компьютеров со слабым железом. Пишется товарищем @LexaDriver и пока находится в стадии активной разработки. Rome Shell Заготовка графической оболочки для OpenOS от MrConstructor303. Работа заглохла в самом начале, обновлений нет с мая 2016. VetaTech OS / AronusOS Неудачная попытка создать мультизадачную графическую оболочку к OpenOS. На данный момент переписывается с нуля, после потери исходников. Minejaro Аналогично. Недописанная графическая оболочка. Выглядит симпатично, но не обновлялась с 2014 года. Название - явная аллюзия на дистрибутив Manjaro Linux. Мультизагрузчики OpenLoader Стандартный мультизагрузчик, который ищет на файловых системах файлик init.lua, чтобы определить, является ли она загрузочной. Может быть найден на лутовых дискетах. Spirit Loader Позволяет при старте компьютера выбирать, с какой загрузочной системы вы хотите запуститься. Titan BIOS Небольшая прошивка для BIOS, которая облегчает разработку OS, позволяя загружать систему в компьютер по HTTP, и запускаться с неё. advancedLoader Симпатичный мультизагрузчик с графическим меню выбора файловой системы. Также поддерживает диски в unmanaged режиме. FreeLoader Проект, начатый как форк OpenLoader, но затем переписанный как самостоятельный мультизагрузчик, за авторством BleedingEyes. Доп. информация Страничка о разработке своей OS с официальной доки (англ.): http://ocdoc.cil.li/tutorial:custom_oses Гайд/размышления о разработке OS под OpenComputers (на англ.): https://oc.cil.li/index.php?/topic/807-operating-systems-under-opencomputers-lua-architecture/ ну и конечно же 5 ПРИЧИН, ПОЧЕМУ ВЫ НЕ ДОЛЖНЫ ПИСАТЬ СВОЮ ОС ДЛЯ OPENCOMPUTERS (от Fingercomp): http://computercraft.ru/topic/882-exos-for-opencomputers-by-syabro/?p=11709 Если вы нашли ошибку в описании, или знаете ещё какую-нибудь попытку создания OS под OpenComputers - смело пишите в эту тему, или мне в личку! P.S. Шмактус!
  20. Я в данном моде чайник... Хотел что бы вы мне подробно рассказали как это сделать. Буду очень благодарен! Если что нужно сделать это на сервере. Описание для чайника (Что где и как нужно)
  21. у каво есть такой скрипт чтоб там писало когда последний раз заходил в игру игрок
  22. На днях в чате прозвучал вопрос, как убрать чёрные полосы по краям экрана. На форуме есть замечательная библиотека от @ECS, которая хорошо решает поставленную задачу: http://computercraft.ru/topic/1130-avtomaticheskii-mssahtab-monitora-izbavliaemsia/ Но есть два нюанса: 1) Код библиотеки явно избыточен. 2) При чтении кода библиотеки создаётся впечатление, что она работает на неведомой магии тёмных сил, что демотивирует новичков, изучающих OpenComputers. Я намерен восполнить данный недостаток. Прочтение этого гайда поможет любому желающему написать кусочек кода под нужды конкретной программы, не подтягивая библиотечный код. Благодарю @Totoro за предоставленную информацию: 1) Текстура блока имеет размер 16 px, а ширина рамки монитора – 2 px; 2) Высота символа на экране в два раза больше его ширины. Данной информации достаточно для получения всех необходимых формул. Приступим: Первый шаг: получить соотношение сторон экрана, выраженное в символах В мире Майнкрафта текстура блока имеет размер в 16 пикселей. На рамку с каждой стороны тратится по 2 пикселя независимо от размера монитора. Очевидно, что размер монитора в пикселях кратен 16 и пропорционален количеству использованных блоков, а размер полезной части экрана всегда меньше размера монитора на 4 пикселя как по вертикали, так и по горизонтали. Поэтому разрешение нескольких мониторов, выставленных в ряд, всегда составит 16*n-4 пикселей по соответствующей координатной оси. Это подтверждает и формула от @ECS, реализованная в функции calculateAspect(screens), но имеющая более сложный вид. Я предлагаю и вовсе отказаться от отдельной функции, т. к. в текущих условиях это будет напрасной тратой ресурсов. Немного поясняющего кода: -- размер монитора в блоках sw,sh = component.screen.getAspectRatio() -- размер экрана монитора с учётом затрат на рамку: sw_ = sw*16-4 sh_ = sh*16-4 -- соотношение сторон экрана, выраженное в пикселях текстуры блока sa = sw_/sh_ -- соотношение сторон экрана, выраженное в символах sa = 2*sw_/sh_ -- оно же без промежуточных присваиваний: sa = 2*(sw*16-4)/(sh*16-4) -- оно же после упрощения формулы и сокращения количества операций sa = (sw*2-0.5)/(sh-0.25) Второй шаг: скорректировать разрешение графической карты под соотношение сторон экрана Теперь требуется получить максимально доступное разрешение GPU и соответствующее ему соотношение сторон: -- максимально возможное разрешение графической карты в символах gw, gh = gpu.maxResolution() -- соотношение сторон при максимальном разрешении в символах ga = gw/gh -- формулы, полученные из предыдущей, и которые пригодятся чуть позже gw = gh*ga gh = gw/ga Для определения дальнейших действий следует вспомнить о физическом смысле соотношения сторон. Исходя из приведённых выше формул, sa и ga можно назвать коэффициентами горизонтальности. Сравнивая их, можно определить, что по горизонтали более вытянуто разрешение либо видеокарты, либо монитора. Понятно, что если монитор имеет больший коэффициент горизонтальности, то для приведения к нему коэффициента горизонтальности видеокарты следует уменьшить её разрешение по вертикали. В ином случае следует уменьшать разрешение GPU по горизонтали: -- код в понятной форме, использованы формулы из предыдущего фрагмента if sa>ga then -- недостаточная горизонтальность GPU ga=sa -- привести горизонтальность в соответствии с экраном gh = gw/ga -- за счёт уменьшения высоты else -- избыточная горизонтальность GPU ga=sa -- привести горизонтальность в соответствии с экраном gw = gh*ga -- за счёт уменьшения ширины end -- код после сокращения лишних операций if sa > gw/gh then gh = gw/sa else gw = gh*sa end Третий шаг: скорректировать разрешение графической карты под нужны программы Вычисленное на предыдущем шаге разрешение может оказаться дробным, и перед использованием его следует округлить. Возможно, что перед этим разрешение должно быть приведено к желаемому масштабу, как это сделано в библиотеке @ECS. Эта часть, скорее всего, не требует пояснений, и готовый код будет, например, таким: -- код для автоматической подстройки разрешения графической карты под размер монитора -- почти не оставляет чёрных полос по краям экрана -- полное исключение полос возможно только при отсутствии округления разрешения local component = require"component" local gpu, screen = component.gpu, component.screen function set_proportional_resolution( scale ) -- коррекция допустимых пределов масштаба if not scale or scale > 1 then scale = 1 elseif scale < 0.1 then scale = 0.1 end -- соотношение сторон монитора в символах: local sw,sh = screen.getAspectRatio() local sa = (sw*2-0.5)/(sh-0.25) -- запрос и коррекция максимального разрешения GPU local gw, gh = gpu.maxResolution() if sa > gw/gh then gh = gw/sa else gw = gh*sa end -- установка нового разрешения GPU с учётом заданного масштаба gpu.setResolution( math.floor(gw*scale), math.floor(gh*scale) ) end -- тест работоспособности на нескольких вариантах масштаба -- в процессе можно видеть, что на некоторых масштабах чёрные полосы имеют больший размер, чем на других local w,h local unicode = require"unicode" for i=0.1, 1, 0.1 do set_proportional_resolution(i) w,h = gpu.getResolution() gpu.fill(1,1,w,h, unicode.char(0x2592)) os.sleep(2) end Приведённый код можно сократить ещё сильнее, например, избавившись от масштабирования, которое может отвлекать читателя от подгонки соотношения сторон. Полное исключение чёрных полос При выполнении этого кода можно видеть, что чёрные полосы не исчезают полностью, и на одних масштабах проявляются сильнее, чем на других. Предположим, требуется полностью избавиться от чёрных полос. Можно было бы написать код и для этого случая, но эта задача не всегда решаема. Кроме того, количество решений сильно ограничено, и не любой интерфейс можно будет подогнать под найденные решения. Пример №1: Монитор максимального допустимого размера 8x6; GPU Tier3 обеспечивает максимальное разрешение 160x50. Условное разрешение монитора в целых символах: sw = 8*8-2 = 62 sh = 6*4-1 = 23 Допустимые разрешения GPU, которые обеспечат отсутствие полос: 62x23 и 124x46. Пример №2: Монитор 6x5; GPU Tier1 обеспечивает максимальное разрешение 50x16. Условное разрешение монитора в целых символах: sw = 6*8-2 = 46 sh = 5*4-1 = 19 Нет разрешений GPU, обеспечивающих полное отсутствие полос. Пример №3: Монитор 5x5; GPU Tier1 обеспечивает максимальное разрешение 50x16. Условное разрешение монитора в целых символах: sw = 5*8-2 = 38 sh = 5*4-1 = 19 Разрешения GPU 50x16 недостаточно для размещения поля символов 38x19. Но если присмотреться внимательно, и вспомнить, что нам важно соотношение, то поле символов можно сократить до 2x1, избавившись от общего делителя 19. В этом случае допустимых разрешений GPU предостаточно, начиная от 2x1 и заканчивая 32x16. Во всех этих случаях пустых чёрных полос на мониторе не будет. Автоматизация этих вычислений вряд ли целесообразна. Скорее всего, имеет смысл примерно прикинуть необходимое разрешение для конкретного интерфейса, выбрать желаемый размер экрана, графическую плату, и выполнив приведённые выше вычисления, уже окончательно определить рабочее разрешение и затем подогнать интерфейс под него. Вот, и вся магия. То, что выглядит сложным, не всегда является таковым на самом деле. Upd: Дополняющий гайд от @ECS: https://computercraft.ru/topic/2501-kak-ubrat-chyornye-polosy-po-krayam-ekrana-v30/
  23. Fingercomp

    OpenComputers 1.7.5

    О прошлой версии я умолчал, но исправляюсь. Вышла 1.7.5 с чаем и сладкими фичами. Новинки Анализатор, которым адреса компонентов получаем, теперь вставляется в планшет. Он займёт компонент barcode_reader, но методов у него нет. Зато он вернёт в ивенте tablet_use адреса и типы всех компонентов внутри блока, если планшетом нажать на него и удерживать до писка. Известно, что в компы вставлять можно любой объём текста не более 256 строк. Дело в том, что из-за ошибки каждая строка отсылает отдельное событие clipboard, а на компьютере есть лимит очереди необработанных сообщений. Равный 256. Поэтому остальные строки отбрасываются. Теперь этот лимит можно менять в конфиге. В internet.request разрешили использовать экзотические HTTP-методы вроде PUT. Ангельские апгрейды, которые позволяют ставить блоки без опоры, теперь вставляются в дронов. Наконец-то. [MC 1.12] Зарядники заряжают предметы в инвентаре игрока рядом с ним. Апгрейд опыта показывает уровень прокачки ещё и в тултипе. [MC 1.12] Если банки с эссенцией из Thaumcraft просканировать через контроллер инвентаря, то добавляется информация о том, что за ссенция в ней находится. [MC 1.12] Поддержка многожильных кабелей из SimpleLogic. [MC 1.12] Поддержка WE-CBE. [MC 1.12] Изменено Вокруг экрана не будет рамки, если не приседать. Добавлено ещё сколько-то имён для роботов. Обновлён китайский перевод мануала. Поменяны некоторые комментарии в конфиге. gpu.bind работает быстрее. В computer.pushSignal можно пихать таблицы! Кроме вложенных. Сделана более логичной нумерация уровней APU. Она соответствует теперь уровню процессора в нём. В RAID все диски переключаются в режим с ФС при вставке. Ну и форматируются, конечно. Починено Роботы научились черпать вёдрами. Очередной дюп жидкости. Два даже. Модемы T2 ловят и проводные сообщения, наконец-то. robot.swing правильно рапортует статус, даже если блок крушится очень быстро. Сообщения между серверами серверной стойки передавались медленно и неторопливо. Реле правильно показывают проходящий трафик. Всякие проблемы с передачей сообщений через реле. Если itemDamageRate поставить в 0, роботы теперь вообще не будут ломать инструмент. Краш из-за hologram.copy. Метод isSunVisible геолайзера на планшете теперь таки работает. Раньше true возвращал всегда. Краш из-за удалённых терминалов. Робот без инвентаря дропнутые предметы сжирал и не давился. TLWY не выкидывался, когда надо было. Можно было сервер положить. Теперь эту ошибку нельзя перехватить в pcall/xpcall. См. коммент об изменении в поведении xpcall. Краш при взрыве работающего компьютера. С включённым LuaJ не все архитектуры были доступны. Краши, баги, недочёты с AE2. Краш с IC2 Classic. Изменения в OpenOS Ошибки, связанные с установкой oppm. Таймеры не вызывались во время event.pull. Команда reset ставит максимальное разрешение экрана. Фиксы в либе vt100. Добротно падает, если принтить объекты с недоброкачественным метаметодом __tostring. Стоит отметить, что OpenComputers больше не будет обновляться для версии MC 1.11.2. На 1.7.10, 1.10.2 и 1.12.2 всё останется по-прежнему. Впрочем, более половины новых фич только для 1.12.2. Качать можно отсюда.
  24. Многие игроки здесь видели или хотя бы слышали про огромный дронодом, который построил @Asior в былые времена на сервере RoboCraft. С тем чтобы прояснить происхождение этой хаты и оставить о ней заметку в этом клубе, специально для «Новостей подполья» @Fingercomp обратился к создателю постройки и попросил рассказать про неё. Редакция представляет обработанную версию истории. История начинается в начале мая 2016 года, когда запустился сервер RoboCraft, на который сразу же хлынули толпы игроков, хотевшие «поскорее стать топовыми игроками, обладателями гор ресурсов и, конечно же, новых идей и программ». Туда попал и герой нашего рассказа. Развитие было довольно сложным. Поначалу он «хотел, как обычно, отстроить бункер и спокойно, потихоньку наращивать силы», но этому воспрепятствовал случай: система автоматического расселения игроков закинула Asior невесть куда — в середину заражённого биома. Очевидно, что герой этому не обрадовался. Ему потому пришлось бегать в поисках нового места. Конечно, Asior таки организовал себе временное убежище и начал стремительное развитие в игре. Но в чате игроки часто оставляли ссылочки на скриншоты своих невероятно красивых палат с невероятно крутых ракурсов. Он перерыл огромное число чертежей домов, замков, статуй — и решил построить дрона. Дрона из OpenComputers. Ведь сервер специально разрабатывался для этого мода. Asior зашёл в сингл и долго, упорно воздвигал новые варианты постройки и безжалостно крушил старые. Наконец, он определился с тем, как именно должно будет выглядеть его будущее жилище. Оставалось лишь воспроизвести это всё на сервере. Но здесь и возникла основная проблема: как добыть такое огромное количество ресурсов для строительства? Разрешена она была путём не самым чистым: Впрочем, и того, что он раздобыл, сполна хватило на постройку основного корпуса дрона. Это потребовало огромного числа строительных лесов и невероятных акробатических способностей и дополнительно осложнялось тем фактом, что полученные вечные блоки не перемещались из хотбара. Но стиснув зубы и получая подкормку от щедрых игроков Asior таки построил дрона. Потому пришлось придумать, как расширить жилище. Некоторые предлагали соорудить какое-нибудь здание, к которому был бы «привязан» дрон, но, увы, это не вписывалось в местность. Далее настала очередь внутренней отделки: ставились перегородки, размещалось оборудование. А монументальное сооружение, памятник роботу и дрону, стал пользовался большой популярностью, чему создатель не противился: «я был не против, чтобы все желающие посмотрели, как я живу, уточнили какие-то вопросы или помогли чем-нибудь». С тех пор сервер RoboCraft давно закрыт, но память о роботе и дроне жива до сих пор. Редакция присоединяется к пожеланию героя остроить то, что поражало бы воображение и отпечаталось в приятных воспоминаниях десятков игроков. И мы всё так же мы призываем вас оформить подписку на «Новости подполья». Годноты здесь много было, есть — а то ли ещё будет.
  25. В последних версиях OpenComputers обрастает всякими загадочными вещами. Игроки, которые только только освоились с предыдущей версией вдруг понимают, что надо изучать все заново. "А пошло оно все!" - думают игроки, и уходят на версию 1.3.6, или переучиваются на ComputerCraft, который проще, и не требует непонятного. А одна из самых загадочных - неведомый EEPROM. Это такая мелкая хрень, без которой не работает ни один компьютер, или даже робот. Хорошо еще, что есть стандартный EEPROM который называется Lua BIOS. Он легко крафтится и заставляет работать компьютеры как и раньше. Но найдем задачку посложнее, где Lua BIOS не поможет. Попробуем собрать микроконтроллер, который будет управлять входными дверями. 1. План Представим, как оно должно работать. Слева от двери (если входить) - микроконтроллер. Ради понтов, возьмем Микроконтроллер 2-ого уровня и поставим в него беспроводную сетевую плату. Кроме того добавим красную плату, чтобы управлять дверью. 1. Если контроллер принимает сигнал "open" - он открывает дверь. 2. Если примет сигнал "close" - он закрывает дверь. 3. Если примет посторонний сигнал - взрывает динамит. Дабы сокровища не достались хакерам. Для управления задействуем любой комп, у которого тоже будет беспроводная плата (или точка доступа). 2. Крафтим контроллер С этим проблем не возникнет. Потому, что я играю в креативе :P . Открываем NEI и берем нужные детали. В последний слот положим пока пустой EEPROM. Потом поставим на него прошивку, а пока - не важно. Нажимаем кнопку "Старт" и достаем готовый блок. 3. Готовим прошивку Теперь, когда все готово, мы построили сокровищницу и скрафтили контроллер - осталось самое главное. Программирование EEPROM'а отличается от программирования обычной программы. Потому, что обычно, наши программы выполняются в OpenOS, которая заботливо загружает нужные библиотеки, предоставляет всякие удобные фичи и прочее. Тем не менее писать мы будем именно в OpenOS. Запустим компьютер, напишем edit bios и введем следующие строки: red = component.proxy(component.list("redstone")())while true do red.setOutput(5, 0) computer.pullSignal(1) red.setOutput(5, 15) computer.pullSignal(1)end Дело в том, что большая часть библиотек, которые мы использовали - это библиотеки OpenOS. А значит мы не можем ими пользоваться в BIOS. Однако кое-что нам доступно. Это библиотеки computer и component, и соответственно все установленные в целевом агрегате (микроконтроллер) компоненты. Более чем достаточно для наших задач. Вышеприведенный код делает следующее: * ищет компонент с названием "redstone" и возвращает его прокси * в вечном цикле посылает нулевой редстоун-импульс направо (side = 5), т.е. гасит сигнал * ждет секунду (на самом деле - ожидает эвентов, то есть сигналов) * посылает редстоун сигнал с силой 15 направо * опять ждет секунду Преследуем двоякую цель: во-первых проверить, что EEPROM вообще работает так про него написано на Вики. Кто его знает? А во-вторых: убедиться, что сторона 5 это именно та сторона, где дверь. А не какая-нибудь другая. Нажмем Ctrl+S, чтобы сохраниться и Ctrl+W, чтобы закрыть редактор. Вставим пустой EEPROM (еще один) в слот нашего компьютера, вместо лежащего там Lua BIOS. И напишем в консоль такую команду: flash -q bios MCBios Программа flash предназначена для прошивки чипов. Флаг -q говорит ей, чтобы не задавала лишних вопросов, затем идет имя файла с нашим кодом (bios) и метка, которую программа шлепнет на чип (MCBios). Все. Доставайте. Lua BIOS на место класть не обязательно, ибо этот слот нам еще потребуется. (Но не забудьте его вернуть, если будете перезагружать компьютер) Чтобы заменить пустой EEPROM в контроллере на наш MCBios, надо положить контроллер и MCBios на верстак. При этом пустой чип вылетит, а новый встанет на его место. Поставим контроллер на пол и протестируем. После клика ПКМ на контроллере - замигала правая лампа. Значит все работает как нужно. 4. Теперь - серьезно Извлеките чип с MCBios обратно (так же как и вставляли, только наоборот). Или приготовьте новый пустой чип. Главное - не запутайтесь в них. Пишем клиент для контроллера. У меня он выглядит примерно так: red = component.proxy(component.list("redstone")())modem = component.proxy(component.list('modem')())modem.open(27)red.setOutput(5, 0)red.setOutput(2, 0) -- no explosions yet =)while true do name, _, sender, _, _, message = computer.pullSignal(2) if name == 'modem_message' then if message == 'open' then red.setOutput(5, 15) elseif message == 'close' then red.setOutput(5, 0) else -- hacker tries to get? red.setOutput(2, 15) -- fire in the hole!!! end endendmodem.close() Все согласно плану. Прошиваем чип, вставляем в контроллер, а контроллер ставим слева от дверей. Сзади к контроллеру осторожно прилаживаем запал. ПКМ! Теперь открываем новый файл на компьютере: edit send И пишем в него такой код: local com = require('component')local modem = com.modemlocal args = {...}modem.broadcast(27, args[1])print("Message '"..args[1].."' sent!") Сохраняем, и закрываем. Это будет программка для тестирования контроллера. 5. Тест! Пишем в консоль send open. Дверь открылась! Пишем send close. Дверь закрылась! Пишем send opeh Упс! Опечатка. О_О
×
×
  • Создать...