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

Лидеры


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

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

  1. 15 баллов
    Ну что ж. Буквально на днях майнось наконец релизнулась в виде полностью самостоятельной и независимой от OpenOS операционки с собственным набором библиотек и вики. Все родное, отечественное (звучит как диагноз). Большинство методов библиотек по типу filesystem или keyboard крайне схожи с таковыми в опеноси по поведению, так что особых проблем с переходом возникать не должно. Также существенно снизился расход оперативной памяти - примерно на 7% от 4 планок 3 уровня. Осталось, конечно, регулярно выискивать мелкие недочеты и допиливать их, а также более подробно наполнять инфу на вики, но в целом результатом я доволен. Среди ключевых нововведений стоит отметить следующие: Полностью переписанный инсталлер, запускающийся даже с EEPROM, имеющий возможность выбора тома для установки и его форматирования, а также систему конфигурации пользовательского профиля. Добавлено несколько системных языков, а заодно возможность установки лишь выбранного языкового пакета вместо всех сразу для экономии места на диске: Полная двойная буферизация графики, все приложения переписаны под библиотеку GUI. Кстати, местный картинко-редактор заимел оконный режим, а также Ёлочка @Totoro стала отлично работать в фоне и украшать хату (в моем случае - жалкий клочок земли в воздухе): Крайне полезный режим Internet Recovery, позволяющий мгновенно переустановить систему напрямую из EEPROM в случае возникновения каких-либо проблем: Возможность заливки файлов напрямую на Pastebin буквально парой кликов: Фича создания ассоциаций расширений файлов с возможностью назначения приложения для открытия того или иного расширения:
  2. 13 баллов
    (проект в разработке) Цель данного проекта - создание нейросети и условий для ее самообучения. В идеале, это будет бомжовый робот минимальной комплектации (возможно даже без жесткого диска), который в зависимости от окружающих условий будет определять свою полезность. Также, он будет "программироваться" снаружи с помощью окружения оставленного другими роботами, формирующими "улей". Апогеем будет саморепликация. Кроме достижения цели, важен и процесс. Наблюдать за самообучением и выбором действий у нейросети очень интересно. Нейросеть изнутри: Мигающие точки - нейроны, линии - синапсы (связи), справа эмулятор мира майнкрафт на движке Love 2d. Нейросети устроены похожим образом. Есть входные значения, скрытые слои и выходные значения. В моей программе робот собирает информацию вокруг себя. На вход подается: Есть ли блоки над, под и перед ним Насколько много клеток он "разведовал" за последнее действие Его позиция в виде значений x,y,z от 0 до 1 Иногда я тестирую со значениями стороны куда он смотрит, возможностью двигаться, расстоянию до последней удачной копки Нейросеть "думает" и выдает 5 значений, которые соответствуют действиям движения 1) вперед, 2) вниз, 3) вверх, 4) вправо, 5) влево. Робот выполняет большее из этих значений. Далее, после действия, я вычисляю коэффициент полезности r [0..1] для этого действия. -- swingSucces: количество вскопанных блоков за действие [0..3] -- input.exploreSucces: коэффициент разведки [0..1], где 0 - уже разводовал все 3 блока, 1 - впервые проверил эти 3 блока -- logic(input.sweetsD < input.old.sweetsD): расстояние до последней удачной копки увеличилось 0, или уменьшилось 1 r = (swingSucces + input.exploreSucces + logic(input.sweetsD < input.old.sweetsD)) / 5 Нейросеь обучается, и в выбранное выходное значение приписывается r a остальные уменьшаются\увеличиваются на 1-r for i=1, #output do output[i] = switch i when actKey (output[i]+val^2)/2 when rndKey (output[i]+(1-val))/2 when oppositeKey (output[i]+(1-val))/4 else output[i] nn:propagate(output) Теперь матан. В начале я использовал обычный Персептрон, найденный готовый на ЛУА, но который мне пришлось править. Проблема в том, что он не может учитывать последние состояния. Нейросети с памятью называются "Long short-term memory" или LSTM, где каждый нейрон выглядит вот так: Найдя библиотеку synaptic.js, хитрыми путями я извлек из нее готовую LSTM сеть, которая получилась на 53 000 строк. Но это не проблема, если зайдет, я перепрограммирую ее на LUA. Текущее состояние сети - отстой. Я неправильно ее обучаю, так как не знаю какие значения выдавать для "обратного распространения ошибки". Круча разные коэффициенты, у меня получилось научить ее двигаться по спирали, как карьерный робот. Сейчас, когда я добавил во входные значения расстояние до последней удачной копки, он научился "кушать" как яблоко, но с огромный количеством лишних действий. В самом майне блоков намного больше и это выглядит вот так. На первом скрине работал 1 робот, на втором штук 6. Сейчас в их действиях слишком много шума. Я специально не даю им кирки, что бы они не унеслись в бесконечность. Фидбек Мне нужно помощь. Подскажите, что лучше подавать на вход, и как обучать сеть. Главная проблема, что для обучения я должен указать какие значения должны быть на выходах при текущих условиях, а я и сам не знаю. Обычно, робот теряется в пустом пространстве и я не знаю какое действие ему казать как "единственно правильное". А так, буду сюда отписываться и отчитываться о процессе разработки.
  3. 11 баллов
    Я очень обожаю дронов из OC, довольно быстрые и манёвренные(и дешёвые!). Меня смущает насколько автофермы из разных модов дорогие, так что вот решение этой проблемы: https://pastebin.com/9TBqRHPw (Для ленивых и счастливых обладателей интернет-карты: pastebin get 9TBqRHPw dronefarm.lua) (Проверьте, работает ли у вас сбор культуры на ПКМ, иначе же работать не будет(Версия на ЛКМ была, но она неудобная)) В программе всего 4 настройки: Размер фермы по X и Z Ожидание в секундах(Это нужно для того, чтобы культура успела вырасти) Ожидание при зарядке(Если дрон разрядился во время полёта) Процент заряда, при котором дрон вернётся домой Конфигурация дрона совсем простая, нужен лишь инвентарь(Можно и два инвентаря, так будет лучше). Установка довольно простая: Скачиваем ферму Делаем чистый EEPROM Вставляем в комплюхтер Пишем flash -q dronefarm.lua dronefarm(Не обязательно dronefarm, можно что угодно написать) Вставляем в дрона ??? Профит! Расстановка фермы: Где жёлтый - граница фермы Красный - место стоянки Длина и ширина может быть любой, главное чтобы зарядки хватило(Если у дрона переполнится инвентарь или разрядится до 20% от общей зарядки единиц - он вернётся на базу)
  4. 10 баллов
    Показывает основную информацию о системе и дисках, позволяет выбирать приоритетный и конкретные диски для загрузки. Из работающего: Информация о системе Краткая информация о дисках Загрузка через init.lua в корне диска Установка приоритетного загрузочного диска (при старте биос будет пытаться загрузится именно с него, а потом уже проверять другие диски) Выжигающий глаза интерфейс и код Форматирование дисков Загрузка в MineOS Из не работающего: Загрузка в Plan9k и SecureOS Вкладка настроек Частично работающее: Загрузка в MineOS (не будет работать если установлено значение приоритетного диска) Предстоит реализовать: Вкладку настроек с языком Включение/выключение авторана Функцию ремонта файла запуска системы (перекачка с репозиции) Модификатор запускаторов MineOS и OpenLoader Запуск файлов на уровне биоса Поддержку (хоть какую нибудь) дисков в блочном режиме Вырезать главный кусочек и сделать возможность работы без интернет карты Перелопатить интерфейс и код, дабы делать всё через ООП Для установки прошейте биос этим файлом: https://raw.githubusercontent.com/titan123023/OCBios/master/bios-starter.lua Сслыль на репозицию: https://github.com/titan123023/OCBios Для работы требуется: Интернет карта Монитор любого уровня Клавиатура (если хотите зайти в сам биос) Как минимум 1 палец (см описание выше)
  5. 9 баллов
    Всем привет. Представляю вам программу для почти полного управления дроном. Но сначала короткая предыстория: Из возможностей отмечу следующее: Перемещение по сторонам света без улучшения "Навигация"(Спасибо версии OC 1.7.3) Возвращение дрона к управляющему планшету(Компьютеру) Удалённый интерпретатор Привязка дрона к управляющему планшету(Почти полная невозможность угона) Красивый Динамичный интерфейс(Отображение заряда планшета, время, заряд дрона, уровень сигнала) Остальные функции можно найти в программе или в скриншотах. Установка: На планшет (Для обладателей интернет-карт): pastebin get 8eEpZtdi drc.lua Для дрона (Для обладателей интернет карт): pastebin get vt7biZzP drc.lua && flash -q drc.lua drc.lua После вынимаем биос и вставляем в дрона. Первый запуск: Первый запуск сопровождается привязкой дрона к порту(Порт можно увидеть открыв дрона) и адресу беспроводной карты. Из-за этого возможность угнать дрона стремится к нулю, так как для первичной настройки нужно стоять не дальше 3 блоков от дрона. Пишем: drc <порт дрона> После этого дрона невозможно угнать, если рядом никого не было и он не мог подслушать сообщение(Перезагрузка привязку не ломает) Пара скриншотов: Видео: P.S Процент справа от шкалы сигнала обозначает не силу сигнала, а мощность передатчиков на планшете с дроном(поэтому для корректной работы нужны одинаковые карты беспроводной сети) В общем на это всё, дань уважения дронам выполнена, теперь могу спать спокойно.
  6. 8 баллов
    Представляю вам опять программу для робота, которая позволяет добывать руду, не лазая по пещерам. Робот, используя геолизер, может самостоятельно находить и добывать руду. Реализованы еще не все возможности, поэтому прошу тестировать и сообщать мне о багах. Требования: Корпус компьютера (уровень II или III) Апгрейд инвентарь (больше - лучше) Апгрейд контроллер инвентаря Жесткий диск EEPROM с прошитым Lua BIOS Геосканер Память (уровень I или выше) Процессор (любой) Апгрейд полета (I уровень) Алмазная кирка или аналогичный инструмент. Опционально: Апгрейд верстак Беспроводная сетевая карта Апгрейд батарея Апгрейд опыта Апгрейд чанклоадер Апгрейд генератор Апгрейд солнечная панель Эндерсундук из мода EnderStorage Установка: Скачать и сохранить файл как init.lua wget https://raw.githubusercontent.com/DOOBW/geominer/master/miner.lua init.lua Закинуть этот файл в корень диска. Добавить диск при сборке робота. Установить робота на платформу из твердых блоков. Дать роботу кирку. Поставить возле робота контейнер и зарядник. Нажать кнопку питания и наслаждаться процессом.
  7. 8 баллов
    Система предоставляет графическую оболочку для планшетов, имеющую минималистичный интерфейс и понятное только мне использование, а так же минимальное (надеюсь) потребление ОЗУ. Из фич оболочка дает: Возможность использования OpenOS частично без использования команд. Для особых случаев - используем контекстное меню -> "Выполнить команду" Возможность посылки уведомлений пользователю. Многозадачность не реализована, так что пассивную часть программы нужно активировать библиотекой thread из OpenOS Запуск программ-папок (*.pkg). Чисто для разграничения кода и возможности создания модулей Адаптивная отрисовка интерфейса. На экранах с разрешением по ширине, не кратной 20, могут возникать проблемы, однако без искусственного изменения разрешения такого не произойдет. Помощь в настройке при первом запуске. На случай проблем - на первом экране используется колёсико мыши. Блокировка экрана Горячие клавиши на главном экране (клик+delete - удалить, ctrl+e+клик - редактировать и подобное) QR-коды для быстрого доступа юзера к ссылкам В планах: Специальный фреймворк аля Zygote из андроида. Естественно абсолютно весь функционал переписывать не буду, однако основной останется. Этот фреймворк повлечет за собой полный рефакторинг кода (перевод системы на него), но полностью устранит все недостатки TabletOSNetwork - что бы было. Протокол сам в себе будет держать защиту от MITM (Сначала на DSA, потом переведу на ECDSA (реально сложно для меня пока)) и некоторую маршрутизацию с помощью специальных реле (что бы у юзеров планшеты не лагали). Установка - pastebin run 1xudmTa7 Выберите в установщике TabletOS и канал обновлений "Stable". В дальнейшем система будет уведомлять о обновлениях, при получении оного нужно будет зайти в настройки (контекстное меню в левом нижнем углу экрана) и там обновиться. В случае, когда при обновлении бросает ошибку - посмотрите изменения, там будут инструкции по ручному обновлению или переустановке системы. Если и это невозможно. переустановите систему. Данные должны сохраниться, а вот система - обновиться.
  8. 8 баллов
    Видел я на хабре пост четырёхлетней давности о включении лампы(в реальном мире) из майнкрафта. Вот он, если что: https://habr.com/ru/post/271527/ Тут я подумал - "А чем я собственно хуже? Почему нельзя контроллировать температуру реактора/дроноферму/дом датчиками движением?" Переходим к практике. Я имею вот такой дисплей купленный в поднебесной(За всеми ссылками и подробной помощью если заинтересуетесь обращаться в личку) Так же, я обладаю платой NodeMcu Lolin V3(Если грубо - это ардуинка с вай-файкой, но нет, это самостоятельный чип esp8266) В общем это всё, что нам сейчас понадобится(Еще понадобится роутер (и белый айпи, если вы играете на сервере)) Я хочу контролировать температуру своего реактора из IC2(но пристроить можно всё что угодно), поэтому берём его. Как это выглядит в игре: Схема реактора(Хотя ничего особо интересного тут нет): Переходим к реальному миру. Нам нужно открыть порт, в моём случае это 4536, к тому же нам нужен постоянный адрес в интернете. Для этого я использую DDNS. Об этом и остальном можно узнать в гугле. Теперь, всё готово чтобы наконец-то смотреть температуру реактора из реально мира! Есть такой простой код(Сейчас говорим про реальный мир): --Если кому будет интересно, вот полная документация по прошивке NodeMcu: https://nodemcu.readthedocs.io/en/master/ wifi.sta.config({ssid = "Xiaomi_2.4G", pwd = "xBfYHR33Le"}) --Мой SSID и пароль моего wi-fi =D wifi.sta.autoconnect(1) --Автоподключение Wi-Fi wifi.setmode(wifi.STATION) --Сейчас ESP8266 Будет работать в режиме клиента) spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8) --Настройка дисплея oled = u8g2.ssd1309_128x64_noname0(1, 8, 4, 0) oled:setFont(u8g2.font_haxrcorp4089_t_cyrillic) --Выставляем шрифт oled:setContrast(255) --Контрастность дисплея) server = net.createServer(net.TCP, 30) --Создаём сервер с тайм-аутом в 30 секунд по TCP протоколу function receiver(socket, temp) --Функция, которая вызывается при подключении oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Темп. Реактора: " .. temp .. "%") --Пишем oled:sendBuffer() --Уже рисуем socket:close() --Разрываем подключение end server:listen(4536 , function(conn) --Выставляем на прослушку порт 4536 conn:on("receive", receiver) end) wifi_check = tmr.create() --Создаём динамический объект таймера wifi_check:alarm(1000, 1, function() --Эта функция - аналог event.timer в OpenComputers, которая так же вызывает функцию. В данном случае мы каждую секунду проверяем Wi-Fi. if not wifi.sta.getip() then --Если мы не имеем айпи, тогда wifi_connect = false oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Подключение к Wi-Fi...") --Пишем oled:sendBuffer() --Рисуем elseif not wifi_connect then --Если мы только что подключились и не получили температуру реактора, тогда рисуем просто текст без температуры wifi_connect = true oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Темп. Реактора: ожидание...") --Пишем oled:sendBuffer() --Рисуем end end) Код в майнкрафте(Очень простой): local component = require("component") local internet = require("internet") local reactor = component.reactor while true do local connection = internet.open("ip", 4536) connection:write(string.sub(reactor.getHeat(), 1, 2)) connection:close() os.sleep(5) end Теперь посмотрим что получилось! Подключение к Wi-Fi: Ожидание температуры: Итог: В общем то тут довольно всё криво сделано, тут надо много чего доделать, на самом деле. Но в целом, работает же=) Мне кажется, что это очень круто(Жаль что всё это без чанклодеров так себе работает). Такие дела. P. s @cyber01 Я сидел в редакторе долго, появилась ошибка "Произошла ошибка конфигурации или сервера". Пришлось вручную редактировать всё=(
  9. 8 баллов
    Обновление завез. Фиксы: Пимпочка скроллбара неправильно отображалась (окно с прокруткой сразу после отрисовки отображало пимпочку, несоотвествующую реальным размерам показанного контента) Юникод в поле ввода теперь поддерживается полноценно Папка рабочего стола изменена в связи с грамматической ошибкой (Desctop -> Desktop) Добавлено: Горячие клавиши. Клик + delete - файл удаляется, клик + ctrl + e - редактирование, клик+ctrl+e+delete - перезапись файла. Иконка батарейки в статусбаре - . (К сожалению, пока является статичным элементом) Техническое: файл настроек автоматически обновляется Изменено: Техническое: очистка кода в SetupWizard Техническое: частичный рефакторинг TabletOSGraphics. P.s. стараюсь выпускать обновления в первую субботу каждого месяца. До этого все изменения накапливаются в канале Experimental. В инсталлере этот канал есть, можете смотреть). Но там обычно немного нестабильно.
  10. 8 баллов
    Всем привет! Накануне я решил создать свой полноценный Банк, но пока я его делал, решил, что это будет карта на прохождение и специально допустил пару уязвимостей. (На самом деле я решил сделать карту на прохождение потому, что мне было лень их фиксить :d). Суть карты в том, что необходимо взломать банк и получить 10000$ на банковской карте. Уязвимости довольно скрыты и предстоит помучаться чтобы их найти, уязвимостей всего две. Первая - глобальная, средней сложности. Вторая - очень скрытая, высокая сложность. На карте так же реализовано подобие вышки, которое позволяет отправлять пакеты друг другу не напрямую, а через эту вышку. Так-же эта вышка помогает покрыть этим "интернетом" всю карту (необходимо поставить много вышек по всей карте) и преодолеть ограничение радиуса отправления пакетов. Банковская карта реализована RFID меткой. На карте присутствует банкомат, сервера, ваш домик и немного налички в сундуке. Правила карты (На вашу совесть, чтобы было интересно): Запрещается использовать компьютеры, кроме своего. (Просматривать логи сервера банка и сервера вышки на экране разрешено). Запрещается просмотр исходников серверов. Запрещается ломать блоки. (Карта в режиме приключения, но читы включены) Так-же имеется библиотека на вашем компьютере для работы с внутренним интернетом, находится она по пути: /lib/gsm.lua Строения на карте: 1. Вышка интернета. 2. ДЦ Сбербанк. 3. Офис Сбербанк. (Компьютер не трогать в нём) 4. Банкомат. 5. Домик кулхацкера. Подсказки по прохождению карты можно попросить у меня во ВКонтакте: https://vk.com/superrolan51 Ссылка на небольшой ролик по карте: Клик Ссылка на сборку: Клик Ссылка на портативную сборку от @Asior: Клик (Для версии Forge 1.7.10) Удачи в взломе! P.S. Не пишите в комментариях подсказки к карте
  11. 8 баллов
    По этой теме уже существует отлаженный софт, успешно используемый многими игроками. Однако на днях я заметил забавную особенность местных видеокарт, позволяющую выставлять разрешение большее, нежели получаемое через gpu.maxResolution(). К примеру, если maxResolution для видеокарты третьего уровня вернет числа 160 и 50, то никто не мешает установить разрешение, скажем, в 20x158 пикселей. При этом при проверке валидности устанавливаемого разрешения соблюдается два правила: Результирующее разрешение по числу пикселей не должно превышать результат умножения чисел, возвращаемых maxResolution. То есть для T3 GPU не более 160 * 50 = 8000. Каждый параметр разрешения, будь то ширина или высота, не должен численно превышать значение возвращаемой ширины. То есть для T3 GPU не более 160. Не знаю, баг это или фича, однако подобное грех не использовать в своих целях. К примеру, старая версия программы при вертикально-удлиненном расположении мониторов позволяла выставить разрешение лишь в 30х50 (1500 пикселей в итоге), заполняя тем самым "черные полосы". В то же время обновленная софтина, учитывающая описанные выше особенности, выдает 69x114 (7866 пикселей), максимально приближаясь к предельной отметке в 8000: Согласитесь, лишние пиксели на дороге не валяются, и, думаю, кому-то будет интересно узнать про реализацию подобного софта. Прежде всего нам требуется определить точную пропорцию мультиблочного монитора: то, как относится его ширина к высоте. Взглянем на текстуру блока: она явно состоит из мелких "квадратиков" в количестве 16 штук, причем лицевая часть монитора имеет рамку толщиной в 2 "квадратика" с каждой стороны: Эти "квадратики" мы и будем использовать для расчета пропорции, так как они позволяют идеально точно получить размеры отображающей части монитора в игровом мире. А размеры "в квадратиках" можно посчитать по формуле: число_блоков_монитора * 16 - 4 Следовательно, пропорция монитора будет считается следующим образом: local gpu = component.gpu local screen = component.proxy(gpu.getScreen()) local blockCountByWidth, blockCountByHeight = component.screen.getAspectRatio() local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) Также не забываем, что высота каждого псевдографического пикселя при отображении в 2 раза больше его ширины, поэтому формула пропорции слегка меняется. Заодно произведем некоторые сокращения, чтобы избавиться от лишних математических операций. Все три варианта эквивалентны: local proportion = 2 * (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 8 - 2) local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) После вычисления пропорции монитора можно приступить к написанию программной логики. Для начала получим максимальное разрешение видеокарты: local maxWidth, maxHeight = gpu.maxResolution() Обладая этими данными, а также взглянув на условия, описанные в начале поста, мы можем составить систему неравенств для получения итогового идеального разрешения: Помним также, что ширину мы вполне можем выразить через высоту и пропорцию монитора: width = proportion * height Подставим этот вариант в систему: Оставим высоту в левой части неравенств: Подставляем имеющиеся переменные в каждое неравенство, рисуем числовую прямую и выбираем высоту, удовлетворяющую условиям неравенства для конкретного случая. Разумеется, в программировании никаких числовых прямых нет, зато есть любимые math.min() и math.max(): local height = math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выражаем ширину через пропорцию local width = height * proportion Все. Разумеется, полученные значения ширины и высоты нужно округлить в меньшую сторону, дабы не кормить видеокарту дробями. Заодно добавим поддержку масштабирования, чтобы выставлять половинное или, скажем, четвертичное от идеального разрешение. Сократив код, избавившись от лишних переменных, мы получаем следующее: local component = require("component") -- Получаем масштаб в качестве первого аргумента скрипта и корректируем его значение local scale = tonumber(select(1, ...) or 1) if not scale or scale > 1 then scale = 1 elseif scale < 0.1 then scale = 0.1 end local gpu = component.gpu local blockCountByWidth, blockCountByHeight = component.proxy(gpu.getScreen()).getAspectRatio() local maxWidth, maxHeight = gpu.maxResolution() local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) local height = scale * math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выставляем полученное разрешение gpu.setResolution(math.floor(height * proportion), math.floor(height)) Надеюсь, это микро-знание кому-то было полезно. Лично я очень доволен, что могу наконец запилить графонистый интерфейс для контроля реакторов на вертикальных мониках без осваивания профессии "глиномес", да и соответствующая либа для автопобора разрешения в оське пригодится.
  12. 7 баллов
    !!! пост в процессе редактирования... В ближайшее время администрация сайта планирует заменить игровой сервер EvilWorld. В связи с этим предлагается ознакомиться с игровыми особенностями и по желанию принять участие в обсуждении и балансных правках. Сервер обкатаем в режиме тестирования и после окончательных доработок проведем вайп и запустим его в обычном режиме для игры и программирования. Краткое описание (легенда): AtomicWars - PvP сервер на выживание. Действие (игровой процесс) происходит в воображаемом огромном мире в постъядерный период. До сих пор достоверно не известно, кто первым нанес ядерный удар, люди или машины. Но мир изменился. Изменился климат. Периодически возникают мощнейшие ураганы. Растения катастрофически замедлили скорость роста. Изменилась угловая скорость вращения Земли, длительность суток увеличилась в 8 раз. В результате страшных ядерных ударов произошли тектонические изменения в земной коре, наблюдаются огромные и многочисленные мелкие скопления лавы по всей глубине. Озоновый слой и магнитное поле Земли нестабильны, что в свою очередь увеличило фактор опасности от излучения(вспышек) солнца и других космических излучений. Мир населяют мутанты и монстры. Некоторые мутанты имеют огнестрельное вооружение. Также ведется война за территории, влияние и ресурсы между небольшими остатками людей. Программисты контролируют Север, лагодромщики ЮГ. Бандиты(сталкеры) не принадлежат ни к тем ни к другим. Они ведут разбойный и свободный образ жизни. Правительственные войска (Объеденные Силы быстрого реагирования), они же модеры и админы укрепились на военных базах и сдерживают набеги налетчиков, монстров и голодранцев. Программисты ищут способ восстановить машины, робототехнику и науку, чтобы остановить голод и катаклизмы и нормализовать климат. Только у них есть доступ к машинам, контролирующим погоду. Инженеры-лагодромщики никаких целей не преследуют. Они жадно поглощают ресурсы мира, строят лагодромы и неумолимо продвигаются на Север, чтобы уничтожить программистов и захватить новые земли. Легенда не является обязательной и игрок может не выбирать, кем ему быть, и может свободно заниматься своими песочными делами и выживать в одиночку, но будет лишен некоторых китов и фишечек, а также всей полноты кооперативной игры и сопутствующих ей тактик и стратегий. Характер модификаций: IT индустриализация инженерия декор PvE оружие и др. Некоторые ключевые моменты геймплея: игровой процесс происходит на огромной территории игровые "расы" : ИТ(программисты), Инженеры(лагодромщики), Сталкеры(бандиты). У каждой расы свой префикс, киты и преимущества* игрок автоматически потребляет по мере необходимости пищу, если она есть в специальных слотиках тактического GUI источники света: временные факелы или электрические источники освещения кастомный дроп с мобов кастомная генерация добавлены кастомные аптечки разных тиров добавлены кастомные войсковые пайки разных тиров добавлен полиэтилен добавлено кастомно несколько растений(лук, томаты, кок-сагыз) и их семена отключен спавн гевеи(только на черном рынке) несколько кастомных руд и камней отключены некоторые ванильные мобы (ведьма, дракон, житель) добавлено оружие (огнестрельное, лазерное, плазменное, химическое, ядерное) Оружие не разрушает мир. доступ к эндерчесту с консоли (платная команда) рандомная телепортация для расселения, по желанию (большой кулдаун, платная команда) GUI аукцион для торговли реурсами ограниченные жизни (хардкор режим BetterQuesting) Игроку при старте дается 200 жизней. При полном уничтожении игрока игра для него заканчивается периодические киты отключен лазер ИК мощный стартовый кит (плазменный пистолетик, инструменты, спички, тактичка, сканер, еда, аптечки, набор шахтера) стационарные базы правительственных войск, на которых можно пополнить запасы и получить некоторые разведданные * полностью отсутствует консольная телепортация (кроме установки дома и ТП на него в небольшом радиусе) путешествие в др. локации только через телепортационные врата, которые игроку придется скрафтить самому. В других измерениях уже будут админ врата, коды к которым можно получить из разведданных, расшифровав их. ежедневные киты кастомные игровые саунтреки* редкие, но опасные аномалии, о приближении которых игрок получает оповещение. Для того, чтобы избежать дебаффов, нужно находиться на высоте не выше чем 30 блоков по Y. Как правило, перед конкретным видом аномалии за некоторое время до ее наступления небо приобретает характерный цвет. Самая страшная аномалия - красное небо. плоский бедрок в один слой (не факт, что это будет, но возможно) включенный реактор ИК наносит урон радиацией в радиусе 5 блоков (ЗК блокирует дебафф) радиоактивные руды (блоки в мире) наносят урон радиацией в радиусе 5 блоков (ЗК блокирует дебафф) радиоактивные руды (айтемы в инвентаре) наносят урон радиацией (ЗК блокирует дебафф) бедрок наносит дебафф радиацией (ЗК блокирует дебафф) максимальный голод убивает мгновенно сильный голод накидывает некоторые дебаффы (медлительность и т.п.) ап роботов (размер главного аккумулятора и некоторые др. хар-ки) добавлена соль в некоторые ключевые рецепты (реактор, солнечные панели, чанклодер, робо-тессеракт, камера ядерного синтеза и др) добавлены специальные кастомные айтемы, которые в китах может периодически получать только та или иная раса для ролевого разделения и создания дефицита того или иного реса на аукционе приваты скорее всего будут отключены, или очень сильно ограничены по размеру, если силовые поля пройдут тестирование кастомные данжи и постройки постапокалиптического антуража (скорее всего не будет. Только игрок Doob прислал одну постройку в виде подземной казармы трехэтажной и тоннелем на поверхность.) Если в течении ОБТ что-то успеем сделать, тогда включим кастомную генерацию данжей и построек в мире. квант скорее всего будет отключен или будет стоить по крафту очень дорого миникарта отсутствует. Добавлен мод атлас. Добавлен мод сканер движения. мировая карта основного мира имеет соотношение сторон 1:4 (X:Z) на сервере ведется учет киллсов, и на сайт планируется вывести ТОП игроков К/D рецептура в подавляющей своей массе дефолтная за исключением совсем убогих или противоречивых рецептов (не исключено изменение в процессе игры для баланса) ураганы сносят ТОЛЬКО фиксированные блоки из списка (скорее всего это будут мелкие растения, кропсы, некоторые строительные блоки, которые теоретически могут сносится ураганом в реальности) Ураганы не разрушают мир из соображений эстетики. и др. изменения * - будет активировано после ОБТ Также в игре благодаря нашим форумчанам java-программистам NEO и vx13 появятся масса новых апгрейдов для роботов и дронов, которые они оперативно разработали для нужд сервера по просьбе администрации: солнечные панели персональный чанклоадер мировой навигатор, который получает мировые координаты ультимейт геосканеры (получают всю информацию о блоке в большом радиусе, тип руды, состояние кропса ИК и пр.) сундучки тессеракт для робота (робот может сендить рес из пузика прямо в МЕ сундук, и даже сквозь измерения) и др. Дополнительная информация и вносимые изменения по модам, балансу, новым фишкам, правкам и изменениям будет появляться в этом посте. Лог всех изменений будет фиксироваться в этой теме. Проморолик: Несколько скринов:
  13. 7 баллов
    ДИСКЛЕЙМЕР При просмотре исходников серверов возможны противопоказания необходима консультация специалиста. Побочные эффекты при просмотре исходников серверов: Эбола, эпилепсия. Ни в коем случае не использовать код карты на практике. Всем привет! После большого перерыва я сделал новую карту. Суть карты взломать аутентификацию маршрутизатора и разрешить доступ в интернет. Сюжет карты: вы школьник, вам около одиннадцати лет, вы учитесь очень плохо. В один день вы принесли домой пять двоек, на вас очень сильно разозлилась мама и решила что во всём виноват интернет. Вызвав компьютерщика, она рассказала ему ситуацию и он в свою очередь заблокировал доступ в интернет на маршрутизаторе, поменял пароль для главного аккаунта, чтобы никто кроме него не мог изменить статус доступа в интернет. Насмотревшись как открывать порты в ютубе, вы замечали в роутере родительский контроль и подумали что сейчас у вас всё получится. После попытки входа, вы увидели сообщение, после которого вы чуть не сломали себе монитор. Ваша задача взломать ваш домашний маршрутизатор (роутер) с помощью вашего компьютера (пинать ногами роутер не нужно) и разрешить доступ в интернет. Чтобы удостоверится, что вы разрешили доступ в интернет - нужно попробовать зайти на сайт wikipedia.org и у вас должен высветится этот сайт. Правила карты (На вашу совесть, чтобы было интересно): Запрещается просмотр исходников серверов (роутера и сайта wikipedia). Команда для открытия браузера: browser Подсказки по прохождению карты можно попросить у меня во ВКонтакте: https://vk.com/superrolan51 Ссылка на небольшой ролик по карте: Клик Ссылка на сборку: Клик Ссылка на портативную сборку: Клик (Для версии Forge 1.7.10) Удачи в взломе! P.S. Не пишите в комментариях подсказки к карте Если у вас есть идеи для новых квестов - отписывайте сюда.
  14. 7 баллов
    Всем здрасти. Скрины: Клиент 1: Клиент 2: Лог сервера: Реализовано: Выдача IP Передача данных по выданым IP Регистрация/удаление доменов Получение IP адреса по домену То что хочется реализовать: Улучшить защиту, возможно сделать шифрование -Улучшить способ передачи данных между внутриигровыми IP Сделать библиотеку для пользовательских программ(С++, Java, Python, итп) для управления\получения данных OC через сервер, а так же поддержку Arduino(Можно будет выводить значения на экран подключеный к Arduino) Добавить поддержку децентрализации если в сети более 1 сервера(Можно будет делать межсерверные DNS-запросы) (Продолжение следует) Плюсы: Можно соединять OC компьютеры стоящие на разных MC серверах Быстрая работа сервера Минусы: Нужна оптимизация и поиск багов Плохая защита Исходники GitHub: https://github.com/TheConnBit/OpenComputersDHCP-DNS P.S. Там же объяснение всех команд, итп Исходники для ленивых (обновлено): Сервер (Запускать через консоль java -jar и лучше в отдельной папке): DHCP-DNS-Server.jar Клиентская библиотека: ddns.lua На скрине показано: подключение к серверу, выдача IP, регистрация домена, запрос IP домена, передача данных, получение, удаление домена, отключение Вообщем, сильно не пинайте за код. Если кто возьмется искать\найдёт баги или будут предложения что улучшить\добавить, пишите мне сюда или на почту bithovalsky@gmail.com Сначало была идея только DHCP сервера, но потом я накнулся на статью Programmist135: http://computercraft.ru/topic/1853-dns/ и реализовал DNS. Последние изменения: - - v1.1 Исправлены названия функций Исправлен перевод Функция Resolve теперь возвращает IP Пофикшены отключения сервером клиентов из за таймаута Echo запроса Список доменов теперь указывается в файле config.properties Изменён способ отправки сообщений по IP, появились порты --Bit
  15. 6 баллов
    В общем я много думал, и это не вариант. Если превратить выходные нейроны во внутренний слои и с них снимать значения, то последний один нейрон а.к.а "полезность" просто настроится всегда показывать 0. Для нейросети это беспроигрышный вариант - робот забился в угол, нейросеть определяет что польза будет 0, и ты ей обратным распространением ошибки подкрепляешь и передаешь 0. В общем, не выйдет так делать. Последние 3 дня работаю над экспортом эмулирующей программы в браузер, но и развлекаюсь добавляя анимации
  16. 6 баллов
    С небольшим запозданием, но я таки обновил сервер снова, и исправил все баги. Итак, теперь сервер постоянно обменивается с клиентами пингами. Это позволяет поддерживать соединение "в тонусе" и не давать ему отвалиться, как на TCP подключениях, так и на веб-клиенте. Для теста я держал соединение между веб-клиентом и программкой в эмуляторе OC открытым примерно два часа. Ничего не сломалось. Кроме того я добавил больше контроля над состоянием соединения. В веб клиенте фон будет загораться красным в случае проблем с соединением, так что это будет легко заметить и обновить страничку. В библиотеке для OpenOS добавились новые методы: server:ping(content[, timeout]), boolean - позволяет послать серверу Stem пинг. В качестве контента указываете любой кусок данных. Сервер должен будет его вернуть в точности чтобы подтвердить пинг. Метод блокирующий, ждет ответа от сервера вплоть до таймаута (который по дефолту 5 секунд). Возвращает true или false. server:isConnected(): boolean, error - проверка того, установлено ли подключение к серверу Stem. Если установлено, вернет true. Если не установлено - вернет nil и сообщение об ошибке. server:reconnect(): server, error - если что, этой командой можно переподключиться к серверу. Вернет ссылку на самого себя (объект server) в случае успеха. В случае ошибки, как водится, nil и строку с сообщением об ошибке. Подробный список команд можно полистать тут. Установить новую версию библиотеки можно по прежнему из Hel: hpm install stem Если библиотека уже была устанвлена, можно только обновить: hpm upgrade stem Если вы не пользуетесь Hel, то качайте по прямой ссылке: wget https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua
  17. 6 баллов
    ВНИМАНИЕ!!! ОБНОВЛЕНИЕ. Сервер STEM ночью был обновлен и перезагружен, всё что было к нему подключено - отключилось. Что нового? Новая веб-страничка. Теперь там появился веб-клиент. Мы можете подключиться к любому каналу и почитать, что там пишут. И даже написать самому. Конечно свободы там меньше чем если работать через OC напрямую - послать любые данные не получится, только UTF-8 текст. Но зато не надо писать код, а можно просто с сайтика всё отправлять. Кроме того, я отрефакторил внутреннюю структуру сервера, поменялось довольно много кода. Всё пока еще сырое, активное тестирование и сообщение о багах приветствуется. В ближайшие несколько дней буду фиксить баги и добавлять остальные обещаные плюшки, типа ping пакета.
  18. 6 баллов
    Программа находится в разработке. Постараюсь упростить процесс настройки программы. Данная программа сканирует содержимое вашей МЕ системы и поддерживает заданное количество указанных в списке предметов. Иными словами предварительно крафтит (preCraft). Это полезно на развитых индустриальных базах, где практически всегда есть медленные рецепты с высокой импульсной нагрузкой, так что если заранее их выполнить можно повысить быстродействие вашего автокрафта. Основой системы является то, что me_interface предоставляет нам информацию о содержимом МЕ и о списке крафтов, а так же предоставляет объекты управления заказанными из OC крафтами. К сожалению получить информацию от текущих крафтах заказанных не из ОС не возможно. Так же API содержит ряд багов по работе со списком предметов в МЕ, а именно некорректно написан фильтр (подробнее можете сами посмотреть на git AE если конечно понимаете scala). В связи с вышеперечисленным требуется много ОЗУ >2mb. Из периферийных устройств нужен adapter подключенный к ме интерфейсу и database https://ocdoc.cil.li/item:database_upgrade для формирования списка прекрафтов. Я постарался минимизировать блокирующие вызовы, однако сканирование списка крафтов при начальной инициализации системы занимает много времени. Установка pasebin get 5hnW78DU preCraft.lua Настройка Первоначально вам необходимо отредактировать код программы. (позже сделаю утилиту конструктор) edit preCraft.lua советую провести манипуляции в текстовом редакторе а потом вставить изменения в ОС На 32 строчке программы находится local preCrafts = { { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } 33 и 34 строчки это и есть прекрафты, вам необходимо заполнить поля size = сколько штук поддерживать поле alias необходимо т.к некоторые моды что используют свою систему предметов например GregTech, Immersive Engineering выдают не человеко читаемые имена блоков. Если вас это устраивает alias = nil если нет пропишите имя руками alias = "название вашего предмета" теоретически длинна списка не ограничена, однако database t3 содержит 81 предмет и в данный момент дописывание в конец списка не реализовано. для увеличения списка просто вставьте между 33 и 34 строчками еще строчек и отредактируйте их { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, обратите внимание что в конце списка строка не содержит запятой { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } параллельно с составлением списка добавляйте предметы в database первый слот database соответствует первой строке списка и так далее local preCrafts = { первая строка списка{ size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, вторая строка списка{ size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } После окончания заполнения списка и database положите database в адаптер и запустите программу с параметрами --int2ext --pclName=preCraftList.lua preCraft.lua --int2ext --pclName=preCraftList.lua программа создаст файл preCraftList.lua после чего database больше не требуется Запуск программы preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 параметр --thrLim=4 определяет сколько крафтовых процессоров использует программа одновременно, по умолчанию 2 (если этот параметр не указывать) автозапуск программы можно организовать добавив вашу строку запуска preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 в .shrc https://pastebin.com/5hnW78DU p.s написано под разрешение 160*50. работать будет на любом но консоль отобразится некорректно
  19. 6 баллов
    Новые солнечные апгрейды(аддон к Opencomputers) выведут роботов на совершенно новый качественный уровень. Роботы станут почти автономными и смогут работать практически неограниченное время (если, конечно, робот будет проверять время суток, видимость неба и текущий заряд и вовремя всплывать на поверхность для подзарядки) Продвинутая, гибридная, ультимейт и квантовая панели обеспечат роботов и дронов неисчерпаемой энергией. Также аддон добавляет потрясающую и невиданную до сегодняшнего дня новую фичу - зарядку своих инструментов при необходимости прямо внутри инвентаря. Позитронный мозг робота/дрона программно уже сам сможет решить, по каким электрическим цепям ему в данный момент необходимо перенаправить могучие потоки энергии - в бур, в электро-краник для гевеи или в любой другой инструмент, который у него в инвентаре, или же в Главный аккумулятор, а при необходимости и направить всю свою мощь и энергию в миллионы ГВт для колоссального удара Теслой и разрушения на кварки всей живой материи в радиусе при опасности и при обнаружении врага на радаре. "Живучесть" и автономность роботов увеличивается на порядки. Также вы можете использовать своего робота в дальних путешествиях и просто дать ему подзарядить джетпак и свои квантовые или нано трусы, если они вдруг внезапно разрядились. Некоторые солнечные апгрейды, конечно же, не дешевые в крафте, но они того стоят. Роботы, наконец-то, шагнули в квантовую эру благодаря новым источникам энергии и новому аддону. Прощайте, архаичные ванильные угольные апгрейд-чайники. Вы хорошо послужили нам, но прогресс идет вперед. Уже приближается звук ударов иридиевых буров из шахт и слышится жужжание квантовых роботов и свист дронов. Замысел, геймдизайн: Alex Java кодинг: Neo
  20. 6 баллов
    Маленький бонус к солярочкам: Железный сундучок на 32, алмазный на 64 слотика сразу. Раньше для максимально возможной прокачки пузика робота требовалось 4 апгрейда сундучка( к слову, робот "аппаратно" ограничен 64-мя слотиками) Но теперь не нужно пихать 4 ванильных сундучка, можно положить один алмазный сундучок и робот полностью апнут максимально по размеру инвентаря. Апгрейдики не особо дорогие в крафте, тир скорее всего установим 1-й в конфиге, максимум, это второй алмазке. Экономия слотиков роботов даст возможность напихать больше разнообразной начинки роботам при сборке.
  21. 6 баллов
    Уважаемые игроки! Просьба принять участие в тестировании Персонального загрузчика чанков (аддон для Opencomputers) на сервере EvilWorld, который работает только при онлайне хозяина. Апгрейд только для робота и дрона. На данный момент установлен лимит на одного игрока: 3 одновременно работающих загрузчика. Каждый загрузчик грузит область 3 на 3 чанка. Разработчик аддона: vx13 Все наблюдения и результаты по работе данного апгрейда просьба оставить в этом топике или на github разработчика.
  22. 6 баллов
  23. 6 баллов
    Тут на днях обновленная софтина Multiscreen в маркет затесалась - добавлена группировка по цветам для гораздо более быстрой отрисовки жирных пикч. Правда, чем жирнее пикча, тем дольше будет обрабатываться каждый моник, но и это уже заметный прогресс:
  24. 6 баллов
    Недавнo завезли нескoлькo нoвых функций. canSeeSky():boolean - вoзвращает true, если виднo небo. Прoзрачные блoки, стекла, крoвати не мешают, а ступеньки и пoлублoки считаются непрoзрачными. detect(стoрoна:number):boolean, string - кoпия функции component.robot, прoверяет наличие блoка с указаннoй стoрoны. Вoзмoжные варианты выдачи: (false, 'air') - пустo, блoк вoздуха. (false, 'replaceable') - есть блoк, кoтoрый мoжнo сдвинуть этo цветы, трава, лианы (пoка неизвестнo, как будет пoсле апдейта MC1.14). В приватах мoжнo считать за true, т. к. рoбoтoм лoмаются тoлькo кактусы. (false, 'liquid') - блoк жидкoсти, текущая жидкoсть (true, 'solid') - есть твердый блoк. (true, 'entity') - какая-тo сущнoсть. (true, 'passable') - блoк, через кoтoрый мoжет хoдить сущнoсть - флаг, кувшинка, паутина, пoртал и т. п. Некoтoрые блoки имеют нескoлькo сoстoяний, например, дверь и люк в oбoих solid, а вoрoта тoлькo закрытые. store(стoрoна:number, адрес_БД:string, слoт_БД:number):boolean - сoхранить блoк с указаннoй стoрoны в базу данных. isSunVisible():boolean - вoзвращает true, если пoгoда ясная, вo время дoждя или грoзы - false
  25. 6 баллов
    Ой, забыл xD Спойлеры делать не умею. так что как-то так пока. Возможно на скриншоты слишком новые и из разрабатываемой версии.
  26. 6 баллов
    За полный сбор:
  27. 6 баллов
    Давненько не было автокрафтеров тут. Может, кому-то пригодится моя версия. Предназначена в первую очередь для крафта всяких часто необходимых мелочей со сложными крафтами (например, компоненты OpenComputers) из примитивных исходных ресурсов (например, процессор из слитков золота и железа, тростника и редстоуна), которые у пользователя отнимают кучу времени на поиск всех транзисторов и крафт недостающих. Рассчитана на использовании робота и двух сундуков, один из которых - основное хранилище (может быть покрупнее), а другой предназначен для резервирования компонентов при крафте. Ссылка: https://pastebin.com/1gqtWLub Необходимая конфигурация робота: Проверялась работа на компонентах (корпус, память, процессор, жёсткий диск) второго уровня. Screen, Keyboard Crafting Upgrade Inventory Upgrade и Inventory Controller Видеокарта и экран первого уровня Для дальнейших потенциальных расширений: Беспроводная карта Upgrade Container Конфигурация установки: Перед роботом - контейнер ресурсов (любой из возможных инвентарей достаточного размера) Под роботом - контейнер-буфер (можно обычный сундук) Рядом желательно поставить зарядник Возможности: Рекурсивный крафт сложных рецептов. Ресурсов расходуется, по результатам практических испытаний, ровно столько, сколько необходимо. Каталог рецептов для крафта, разбитый на страницы по 10 предметов для более удобного пролистывания на маленьком экране робота. Портативность - требуется только робот, два сундука и исходные ресурсы. Желателен также источник энергии Сообщения о том, каких конкретно исходных ресурсов не хватает для крафта (исходные ресурсы - те, для которых не найдено рецепта) Процесс крафта подробно отображается на экране, чтоб за ним было не так скучно и одиноко следить (см. недостатки) Об окончании крафта робот сообщит приветливым писком. Равно как и о неудаче. Недостатки и известные недочёты: Скорость..... Крафт занимает значительное время. Например, изготовление процессора 3го уровня из примитивных ресурсов (тростник, красный камень, алмазы, дерево для резаков, слитки золота, железа) занимает около 5 минут. Стоит отметить что количество изготавливаемых предметов не сильно влияет на время (2 процессора, скорее всего, будут делаться те же примерно 5 минут). Не умеет работать с альтернативными ресурсами. Возможно, когда-нибудь исправлю. Не умеет работать с инструментами (имеются ввиду многоразовые, как молот ИК2). Возможно, так же когда-нибудь исправлю. Не умеет работать с количествами предметов более стака, а также не гарантируется корректная работа с предметами, не складывающимися в стак. Постараюсь исправить в ближайшее время. Нет поиска по именам компонентов (то есть, либо задаёте название компонента целиком, либо задаёте крафт через каталог). Когда-нибудь поправлю Проверок на наличие контейнеров не делается, так как программа писалась "для себя" и находится в разработке. В дальнейшем будут введены. Также не везде гарантируется наличие защиты от "Количество предметов: Привет". Особенности: Шаблоны содержатся в одном файле, что облегчает переносимость, но приносит определённые неудобства всвязи с размерами файла (12 строк на предмет). Буду думать, как лучше сделать (разбить на разные файлы?). Файл имеющихся шаблонов могу выложить при необходимости (на разных сборках эти шаблоны могут отличаться) Дальнейшее развитие (no promises!): Исправление имеющихся недочётов Поддержка работы по сети (заказ компонентов, сообщение о готовности - дистанционно). Работа с более сложными инвентарями - сборщики, и т.д. Работа с машинами-обработчиками ресурсов - когда-нибудь в отдалённом будущем, скорее всего. Управление: Интерфейс текстовый. Посмотреть команды главного меню можно, нажав "Enter" (оставив поле ввода пустым).
  28. 5 баллов
    Небольшое обновление(Абсолютный контроль над дроном): Доделал интерпретатор, теперь почти неотличим от оригинала. Теперь не нужно писать return чтобы вернуть значение, а так же появилось две функции - sleep() и print(). 1 помогает прекратить код через CTRL+D при исполнении, 2 поможет вернуть значение в работающем коде: Так же добавил утилиту net(*клик*) для того, чтобы загрузить программу на дрона. То есть, можно запустить любую программу командой net <program_name> И она сию минуту загрузится на дрон: Установка: pastebin get gF4URgfn net.lua P.S Так же ещё много мелких правок, но это не суть важно. Так же упёрся в лимит по памяти, но я думаю это уже неважно =d P.P.S В интерпретаторе есть функция 'clear' - если её написать, терминал очистится(как неожиданно, правда?)
  29. 5 баллов
    Зачастую на серверах с техносборками ставится базовая коллекция модов: IndustrialCraft BuildCraft OpenComputers Благодаря моду билдкрафта в мире генерируются озера нефти, особенно огромные они в море. Если у вас хватит терпения его выкачать и переработать в дизельное топливо, то наверняка появится вопрос, куда это топливо девать кроме как как в двигатели внутреннего сгорания. В моде IndustrialCraft есть очень интересный генератор со сложным крафтом - полужидкостный генератор. Его особенность в том, что он может вырабатывать из топлива 32 eu/t, но есть большая проблема, передавать в провода он может только 20 eu/t. Данная проблема проявляется только на сервере, в одиночке все нормально. Возможно это разработчики что-то напутали, или так задумано, или чьи-то кривые ручки не туда тыкнули в настройках сервера, однако с 1 ведра топлива можно легко получить 128000 eu. Если запустить его в автоматическом режиме, то он начнет работать импульсами - зарядка внутреннего буфера, отключение, передача 20 eu в провода, включение, зарядка внутреннего буфера ... и т.д Но при этом топливо будет расходоваться не полностью, а с огромными потерями. По 5 мл на запуск, что не есть хорошо. Поэтому буфер всегда должен быть свободен. А постоянно мониторить и вовремя сливать энергию может обычный компьютер из мода OpenComputers. Итак, представляю вашему вниманию автоматический контроллер полужидкостных генераторов на ОС. Я разделил программу для генераторов на 3 уровня. Везде используются разные программы, но они работают на одном и том же принципе. Выбирайте то, что вам больше по душе и вперед строить! Генератор высокого класса Делается чисто на декор и понты Для тех, у кого туго с ресурсами, предлагаю генератор среднего класса. Он не настолько красивый, графония вообще не имеет, но главное, что он довольно низок по потреблению памяти, а так-же скорость обработки данных в разы шустрее. Из минусов - он нессиметричный, хотя это уже дело вкуса каждого. При желании можете налепить батареек и будет вам симметрия. Ну и последний тип генератора - бюджетный на микроконтроллере. От остальных он отличается крайне дешевыми компонентами, хотя со сборкой придется повозиться. Вот такие интересные получились контроллеры полужидкостных реакторов. Качайте нефть скорее, её не так много во всем мире ...
  30. 5 баллов
    Я нашёл схему. Производительность 4280 eu/t на урановых сборках или 21398.288 eu/t на MOX при разогреве до 0.9999.
  31. 5 баллов
    OpenPeripheral предоставляет мощный функционал по созданию собственных интерфейсов в виде очков дополненной реальности "Terminal Glasses". К сожалению, полного списка функционала и всех нюансов по работе с этими очками не найти. Присутствуют некоторые отрывки, небольшие видео с результатами работы и прочие поделки. Но! Спустя пару бессонных ночей, декомпилированного кода и трёх литров чая, удалось описать полный функционал этих очков. Основные возможности очков и периферии: Отображение геометрических объектов различной сложности и цветовой гаммы. Отображение текста. Отображение жидкостей и предметов. Взаимодействие с мышью/клавиатурой. Чтение сообщений чата. Специальные команды чата, не отображающиеся в нем. Возможность индивидуальной работы с каждым пользователем терминала. Установка очков в любой шлем. Возможности данных очков я опишу по разделам, в лучших традициях вики Для начала, определю некоторые понятия. Система терминальных очков состоит из трёх предметов: терминала, очков, беспроводной клавиатуры. Терминал является центром всей системы, через него происходит общение между компьютером и очками. Также он хранит все данные интерфейса и пользователей. На очки выводится вся графическая информация, а сами очки передают сообщения или команды чата на терминал. Беспроводная клавиатура позволяет дополнить всю систему, своей возможностью контроля элементов при помощи клавиатуры и мыши. Как выводить информацию на очки: local com = require("component") local opb = com.openperipheral_bridge -- Построение интерфейса происходит во внутреннем буффере терминала (он же мост). local text = opb.addText(10, 10, "", 0xffef7f) -- Создаем компонент "Текст". -- Его нужно создать только один раз, в остальное время можно обращаться по ссылке и изменять любой параметр. local counter = 0 while true do -- В качестве примера будет выводится счетчик секунд. text.setText(tostring(counter)) -- Обновляем текста компонента. opb.sync() -- Для отображения графики на экране, необходимо отправить буффер на очки. os.sleep(1) -- Ждем секунду и прибавляем счетчик. counter = counter+1 end API Перед тем как перейти к API, нужно знать: Color:number -- Число в формате TrueColor RGB (по умолчанию 0xffffff). Opacity:number -- Прозрачность, число от 0.0 до 1.0 (по умолчанию 1). Знак '?' -- Опциональный параметр/функция. События Строковые константы VerticalAlignment:[TOP, MIDDLE, BOTTOM] HorizontalAlignment:[LEFT, MIDDLE, RIGHT] GuiElement:[OVERLAY, PORTAL, HOTBAR, CROSSHAIRS, BOSS_HEALTH, HEALTH, ARMOR, FOOD, MOUNT_HEALTH, AIR, EXPERIENCE, JUMP_BAR, OBJECTIVES] Структуры данных Абстрактные объекты Графические объекты Объекты контроля Вот такая шпаргалка по очкам, надеюсь пригодится
  32. 5 баллов
    Не так давно решил я немного нафармить обсидиана, но прыгать по озерам лавы, тушить её водой, а потом долго и нудно собирать как-то не то. Хотелось автоматизировать этот процесс. Да есть специальные генераторы обсидиана, но там требуются расходники в виде красной пыли или другого горючего материала, что для меня было неприемлимо. Поэтому был собран первый прототип генератора обсидиана. Портатип генератора обсидианта 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
  33. 5 баллов
    Уважаемые форумчане и игроки проекта! Посовещавшись, администрация сайта пришла к выводу, что было бы неплохо и не лишним внести какие-то свежие весенние правки на сайте и в игровой процесс. Администрацией сайта был выработан план-капкан. Кодовое название операции "Весенний ветер" Сервер хоть и работает суперстабильно, но он устарел немного концептуально, и все построено и скрафчено, а сайт после осеннего обновления движка хоть и получился в целом достаточно функциональным, но немного визуально мрачноватый и даже слегка унылый. Ванильную светлую схему не рассматриваю. Не хватает какой-то привлекательности, не хватает игровой морды лица и живости, некоторые элементы сайта вообще выпадают из целостной картины и не вписываются в общую концепцию новой цветовой схемы и дизайна. Что видит пользователь, попав на главную страницу? Правильно. Он видит на так называемом "первом экране" название сайта в лого, огромную серо-черную портянку текста с непонятными зелеными и синими тайтлами и чат на полэкрана, в котором накопилось аж 10 сообщений за 1,5 месяца. Какие-то кнопки голосования и иконку глобуса, которая вообще не понятно что означает. То ли это кнопка интернета, а может быть это новости политики. Хотя это раздел писем и уведомлений. Почему там разработчик шаблона запихал не значок письма, или не колокольчик, а глобус, лично для меня до сих пор загадка. Но это еще мелочи. Бог с ним, с глобусом. Понять, что наш сайт в игровой форме обучает программированию, что на нашем проекте есть игровые сервера майнкрафт и опытные форумчане программисты, которые помогут легко влиться в игровой процесс и в изучение компьютерных модов и Lua и т.д., новому посетителю сайта очень сложно. Нет никаких четких заголовков о том, о чем вообще сайт. Нужно очень долго скроллить серую портянку текста вверх и вниз, чтобы понять(не знаю как кому, по крайней мере за себя говорю), что это вообще за херабра и что наш сайт делает и что на нем вообще находится и для чего он. В связи с этим в ближайшее время будут проведены следующие мероприятия: обновление движка до актуальной версии дизайн сайта будет изменен косметическая реструктуризация разделов форума и др. мелкие правки После выполнения вышеуказанных мероприятий администрация сайта приступит к развертыванию нового игрового сервера (о нем в отдельной теме) Оставляйте свои конструктивные предложения, референсы, ссылки на какие-то другие ресурсы, просьбы и т.п.. Проголосуйте в опросе, а также укажите в топике, что именно не нравится и что бесит, или если все хорошо и все нравится, тоже напишите. Что в данный момент сделано неудобно на сайте, что трудно найти, чего не хватает, может ссылок каких, картинок, разделов и т.д. и т.п. Например: "сделайте отдельную статическую Страницу-Шпаргалку Для Новичка, с подсказками, инфографикой, ссылками на полезные ресурсы и краткой информацией о том, что где и как скачать и изучать, как начать изучать моды и Луа, какая литература поможет, видеобзоры полезные может какие-то и т.п.. Кнопку ИГРАТЬ запихайте в значок какой-то на видное место в шапке, а ссылки на голосовалки никому не нужные поместите в футер" и в таком духе и т.п., главное, чтобы идеи были максимально конкретными и хоть как-то обоснованными и реально выполнимыми. Если темная схема окажется востребованной, тогда сделаем светлую и абсолютную копию в темном стиле. То есть сайт будет отличаться только цветом. Не будет как сейчас две разных верстки. Цель операции "Весенний ветер" - как-то немного освежить проект и сайт в частности, сделать его каким-то более удобным и приветливым и более игровым, что-то добавить новенькое, а также запустить новый сервер с какими-то новыми разнообразными фишками.
  34. 5 баллов
    Давным-давно делал модный файловый менеджер с графическим интерфейсом для опенкомпов. Переходы по папкам, запуск файлов, распаковака tarball'ов и просмотр картинок в одной программе, к тому же фичи в виде листания свайпами, экранной клавиатуры и горстки настроек. И все это добро занимало меньше килобайта. Но развивать идею не стал, код удалил и осталась только одна картинка тестовой версии. Недавно решил это дело возродить, без зависимостей и лишних свистоплясок. Для начала напишем функции, которые добавят дополнительные возможности для пользователя. Когда игрок тыкает в экран, создаются два события - touch и drop. Когда зажимает и тащит - touch, потом куча drag и в конце drop. Из имеющихся событий, можно развить дополнительные события - клик, двойной клик и свайп. Можно даже добавить сложные жесты, но пока не понятно, как они могут пригодиться. На все нужные события повесим слушателей и будем сохранять результат в переменную. Слушатель для события touch будет проверять, было ли предыдущее событие drop. Затем сравнит с временем от последнего клика, вычислит расстояние между точками, в которых произошло событие. При совпадении координат и заданным временем между кликами пошлет событие double_click. Для события drop надо проверить, было ли предыдущим touch и по тому же параметру скорости проверять время между событиями, чтобы не захватывать долгие нажатия. Если предыдущим событием было drag, то надо определить расстояние между началом и концом действия, вычислить угол и послать это все в виде события swipe. В итоге получится примерно такой код: local computer = require('computer') -- подгрузить обертку для uptime & pushSignal local event = require('event') -- подгрузить библиотеку событий local lastEvent = nil -- последнее действие local lastTouch = nil -- последнее касание local eventTime = nil -- время от последнего события local clickSpeed = 0.5 -- время, за которое совершается клик и дабл-клик event.listen('drag', function(...) lastEvent = {...} -- просто сохранить событие end) event.listen('touch', function(...) local e = {...} -- сохранить событие в таблицу if e[5] == 0 and lastEvent and lastEvent[1] == 'drop' then -- если нажата ЛКМ и предыдущее было drop if eventTime and computer.uptime()-eventTime < clickSpeed then -- если прошло меньше времени, чем задано if lastTouch and lastTouch[3]-e[3]+lastTouch[4]-e[4] == 0 then -- если координаты событий не отличаются computer.pushSignal('double_click', e[2], e[3], e[4], e[6]) -- послать дабл-клик с координатами end end lastTouch = e -- сохранить последнее касание end eventTime = computer.uptime() -- обновить таймштамп события lastEvent = e -- сохранить событие end) event.listen('drop', function(...) local e = {...} -- сохранить событие в таблицу if e[5] == 0 and lastEvent then -- если нажата ЛКМ if lastEvent[1] == 'touch' then -- если предыдущее событие было касанием if eventTime and computer.uptime()-eventTime < clickSpeed then -- если прошло меньше времени, чем задано computer.pushSignal('click', e[2], e[3], e[4], e[6]) -- послать клик с координатами end elseif lastEvent[1] == 'drag' then -- если предыдущее было тасканием local dx, dy = lastTouch[3]-e[3], lastTouch[4]-e[4] -- найти дельту до координат касания computer.pushSignal('swipe', e[2], dx, dy, math.floor(math.deg(math.atan(dx/dy))), e[6]) -- послать свайп с дельтой и углом end end eventTime = computer.uptime() -- обновить таймштамп события lastEvent = e -- сохранить событие end) Пока он ничего не делает, только создает события, когда будет готов функционал отрисовки и взаимодействия с файловой системой, добавим к этим слушателям управляющие функции.
  35. 5 баллов
    И снова доброго времени суток! Написал и недавно допили прогу по упровлению светом с помощью RedLogic! Команда для скачивания: pastebin get -f uZFEL62c light.lua Вот код: component = require("component"); side = require("sides"); color = require("colors"); rs = component.redstone; --funcs------------------------------------------------------------------------------------------------------------- function hlp() os.execute('clear'); check(); print('\n-------------------------------------------------', '\nlight_1_on - to switсh on a light_1;', '\nlight_1_off - to switсh off a light_1;', '\nlight_2_on - to switсh on a light_2;', '\nlight_2_off - to switсh of a light_2;', '\nall_on - switсh on all light;', '\nall_off - to switсh off all light;', '\n-------------------------------------------------\n'); end -- function check() local component = require('component'); local light_1 = component.redstone.getBundledInput(2, 14); local light_2 = component.redstone.getBundledInput(2, 4); if light_1 <= 255 and light_1 > 15 then print('Light_1 \x1b[32m++\x1b[0m '); elseif light_1 >= 0 and light_1 < 15 then print('Light_1 \x1b[31m--\x1b[0m '); end if light_2 <= 255 and light_2 > 15 then print('Light_2 \x1b[32m++\x1b[0m'); elseif light_2 >= 0 and light_2 < 15 then print('Light_2 \x1b[31m--\x1b[0m'); end end -- function _light_1_on() rs.setBundledOutput(2, 14, 255); os.execute('clear'); check(); end -- function _light_1_off() rs.setBundledOutput(2, 14, 0); os.execute('clear'); check(); end -- function _light_2_on() rs.setBundledOutput(2, 4, 255); os.execute('clear'); check(); end -- function _light_2_off() rs.setBundledOutput(2, 4, 0); os.execute('clear'); check(); end -- function _all_off() rs.setBundledOutput(2, 4, 0); rs.setBundledOutput(2, 14, 0); os.execute('clear'); check(); end -- function _all_on() rs.setBundledOutput(2, 4, 255); rs.setBundledOutput(2, 14, 255); os.execute('clear'); check(); end --main-------------------------------------------------------------------------------------------------------------- os.execute('clear'); print('Enter \'help\''); local cmds = { light_1_on = _light_1_on, light_1_off = _light_1_off, light_2_on = _light_2_on, light_2_off = _light_2_off, all_on = _all_on, all_off = _all_off, help = hlp } local term = require("term"); while true do term.write('> '); cmd = term.read(); if cmd == false then print("Exiting!") os.exit() end cmd, _ = cmd:gsub("\n",""); if type(cmds[cmd]) == "function" then cmds[cmd](); else print("No such command: " .. cmd); end end (На лампе №1 нет контакта, но и так понятно что всё работает) Если преодолею лень и перестану тупить то возможно у этой проги появится GUI!
  36. 5 баллов
    Недавно начал писать бота с использованием этой замечательной библиотеки, но к несчастью столкнулся с некоторыми недоработками. Поэтому решено было доработать библиотеку imodem и вот что из этого получилось: Обновление для библиотеки imodem Теперь imodem может обрабатывать личные сообщения (раньше просто игнорил их). Говорим спасибо @Bit Добавлена авторизация ника Все данные по именам/каналам лежат в файле конфигурации по адресу /etc/imodem.cfg Возможен запуск по данным пользователя из Shell Добавлено логирование Добавлено переподключение если отключится интернет Итак, поясняю. Немного изменился порядок приема сообщения. Теперь входные данные выглядят так: modem_message ник_imodem ник_говорящего 0 #канал/ник_imodem сообщение Если сообщение идет с канала, то указывается канал, если личное сообщение, то ник imodem. Чтобы не лазить по библиотеке, ради изменения ника, канала, сервера было решено перенести все эти данные в файл конфигурации. Библиотека автоматически проверяет файл конфигурации, и в случае если его не найдет, самостоятельно его восстановит. Данные хранятся в следующем виде: nick = "Тут ник" pass = "Пароль (0)" server = "irc.esper.net:6667" channel = "#канал" log = "Записывать логи (1/0)" Чтобы не заморачиваться с настройкой ника/канала/сервера/логов можно передать все эти данные одной командой: imodem [server[:port]] <nickname> <password> <channel> <save(1/0)> <log(1/0)> Ну а если все настроено и вас устраивает, можете напрямую imodem запускать и по сохраненным данным все запустится. Логирование сделано больше для отладки, логи можно найти по адресу /IMODEMLOG.txt Для того чтобы imodem мог переподключаться, через каждые 60 секунд оправляется пингование на сервер. И если в течении 30 секунд не придет ответ, imodem автоматически переподключится. Это лучше чем словить кратковременный сбой в доступе к интернету и потом вручную перезагружать библиотеку. Скачать библиотеку можно по команде pastebin get -f MvR7FTGS /lib/imodem.lua Выражаю благодарность за помощь в улучшении @Bit, @Doob, @vladimir, @Fingercomp
  37. 5 баллов
    Робот может двигаться, пора добавить функцию сканирования породы и калибровки компаса. (Пока тестировал, обнаружил баг работы с зачарованными инструментами, пришлось немного переделать функцию step() - теперь после неудачного свинга, робот дополнительно проверяет наличие блока. Можно будет оставить, даже когда разрабы это исправят) Чтобы отфильтровать блоки по плотности, надо получить плотность нужных блоков с учетом шумов. На расстоянии x8 z8 y1 от геосканера, максимальная плотность бедрока равна -0.317, внесем в фильтр -0.31. Для руды 3.683, но это ванильная руда, в модах бывает и больше. Минимальная плотность обсидиана 49.312, значит, eсли он не нужен, установим для полезных блоков максимальную плотность 40. C минимальной плотностью не все так гладко. Свинцовая руда из индастриала имеет плотность 2.5 это как у деревянных предметов, разброс с учетом шума от 1.3 до 2.7, это пересекается с камнем, у которого 0.8 - 2.2. Вот таблица некоторых блоков с минимальной и максимальной плотностью: Руда 2.312 - 3.683 Стекло -0.388 - 0.983 Камень 0.812 - 2.183 Грязь -0.188 - 1.183 Сундук 1.312 - 2.683 Обсидиан 49.312 - 50.683 Видно, что плотность стекла пересекается с плотностью коренной породы, но у бедрока приоритет выше, поэтому лучше лишний раз обойти. Исходя из этих данных, полезные блоки будут отмечаться с минимальной плотностью 2.3 и максимальной 40 Теперь опишем функцию сканирования. Заглянем в подсказку. Чтобы получить сырые данные, зададим координаты и размеры квадрата, относительно сканера. geolyzer.scan(позиция_х, позиция_z, позиция_y, ширина, длина, высота) Так как один раз можно отканировать только 64 блока, будем делать 4 подхода, получая координаты квадрата по горизонтали из вызывающей функции. Преобразовываем данные в координаты, попутно анализируя плотность условным оператором и устанавливаем метки. При обнаружении бедрока устанавливаем соответсвующий флаг во внешней для всех функций переменной. Получаем функцию scan(), выглядеть она будет примерно так: local function scan(xx, zz) -- сканирование квадрата x8 относительно робота local raw, index = geolyzer.scan(xx, zz, -1, 8, 8, 1), 1 -- получить сырые данные, установить индекс в начало таблицы for z = zz, zz+7 do -- развертка данных по z for x = xx, xx+7 do -- развертка данных по х if raw[index] >= 2.3 and raw[index] <= 40 then -- если обнаружен блок с плотностью от 2.3 до 40 table.insert(WORLD.x, X+x) --| записать метку в список table.insert(WORLD.y, Y-1) --| с коррекцией локальных table.insert(WORLD.z, Z+z) --| координат геосканера elseif raw[index] < -0.31 then -- если обнаружен блок с отрицательной плотностью border = true -- сделать отметку end index = index + 1 -- переход к следующему индексу сырых даннх end end end Раз уже взялись за геосканер, напишем и компас. Чтобы определить стороны света, надо сломать блок перед носом, просканировать его, затем установить обратно и, если есть разница - выдать результат. Для большей надежности добавим вращение вокруг своей оси, т. к. блока перед носом может и не быть или быть, но не тот. Координаты блоков задаем в таблице, сбрасываем текущее направление, определяем заново, вот и вся функция. Назовем ее compass() local function compass() -- определение сторон света local sides = {{-1,0}, {0,-1}, {1,0}, [0]={0,1}} -- привязка значений сторон света к смежным блокам D = nil -- обнуление текущего направления while not D do -- пока направление не найдено for n = 0, 3 do -- перебор сторон света robot.swing(3) -- разрушение блока if geolyzer.scan(sides[n][1], sides[n][2], 0, 1, 1, 1)[1] == 0 and robot.place(3) then -- тестовое сканирование и установка блока if geolyzer.scan(sides[n][1], sides[n][2], 0, 1, 1, 1)[1] > 0 then -- если обнаружена разница в сканах D = n -- установить новое направление break -- выйти из цикла end end end turn() -- задействовать простой поворот end end Самые важные функции готовы, можно приступить к тестированию.
  38. 5 баллов
    Ядро копателя готово, теперь можно и пощупать. Напишем пробную функцию сканирования и добычи одного слоя. Сначала откалибруем компас и зададим таблицу с координатами сканируемых квадратов. Затем, отсканируем квадрат 16 на 16 блоков, выведем количество обнаруженных блоков. И в цикле обойдем все метки. Вроде бы все просто. Ах, да... будем искать ближайший блок к текущей позиции, чтобы быстрее закончить работу. Есть много подходов к определению расстояний. Например квадрат гипотенузы равен сумме квадратов катетов, формула для нашего случая будет math.sqrt((X-x)^2+(Z-z)^2), где X,Z - координаты робота, x,z - координаты метки, можно выкинуть квадратный корень, в нашем случае бесполезный и даже вредный. Но тут есть одно "но", мы получили гипотенузу, а это наименьшее расстояние между точками, а роботы по диагонали не ходят. Я буду вычислять дельту между точками, суммируя реальное расстояние, которое пройдет робот по формуле math.abs(X-x)+math.abs(Z-z) Эта операция в сферическом вакууме потребляет на 5% больше процессорного времени, чем предыдущая, но с лихвой окупается сэкономленными шагами. В цикле будем обходить таблицу с метками, до каждой вычисляя расстояние, самый лучший результат с индексом будем хранить в отдельных переменных. По окончании работы цикла, будем посылать робота в ближайшую точку. Код всей тестовой программы под спойлером. А вот и видео с демонстрацией. Можно добавить штрафы на повороты, тогда он будет меньше крутиться и собирать кучи линейкой, а не змейкой.
  39. 5 баллов
    А я костылял си апи в луа для опенкомпов. Нет, плюсы даже я костылять не стал — мне и си хватило. Ситуация была такова. Я тогда ещё пилил свою гуи-либу-убийцу-всего-живого-своей-охрененностью, и она как-то подозрительно тормозила. А когда программы подозрительно тормозят, юзают профилятор. Который желательно писать на си, дабы минимизировать задержки. Что я и сделал, после чего последовали долгие недели попыток прицепить си-модуль к луа на OC. Ну, прежде всего, я чутка пропатчил мод: внёс внутрь песочницуы дебаг-либу родную и не менее родной модуль package, который умеет запускать си-модули. Затем я всяко-разно пытался скомпилировать свой профилятор так, что при загрузке его он подхватывал бы символы луа. Не получилось. Поэтому я взял сырцы луа, которые юзаются в OC. Я их взял, всунул туда свой профилятор и сцомпилировал их вместе так, будто профилятор был встроенной либой луа. Костыли страшные, да. Получившимся подменил то, что лежало стандартно внутри мода, и пересобрал последний. Такими шаманствами я таки осилил получить свой ненаглядный профилятор внутри опенкомпа, и потому смог пропрофилировать свою гуи-либу-убийцу-всего-живого-своей-охрененностью. Это мне, конечно, ни о чём не поведало новом и ничем не помогло, да и гуи-либу эту я таки забросил, но это уже другая история. А можно без костылей? Не, без костылей не получится. Не потому, что плюсы — это уже костыль. Хотя это тоже справедливо (то есть, нет, конечно, не будем холивар разводить). А потому, что авторам мода и в голову не приходило, что кто-то чем-то подобным будет заниматься, и, более того, намеренно всяко-разно отрезали куски луа так, чтобы это оказалось в принципе невозможным. Потому как всем известно, как просто в си выстрелить в ногу вне зависимости от желаний владельца этой ноги, что недопустимо на публичных серверах всяких. Поэтому остаётся учить Луа. Язык это хороший, простой, минималистичный, красивый и полезный, хотя и чутка неудобный порою, как минимум, для заядлого заплюсневевшего программиста из-за динамической типизации.
  40. 5 баллов
    Итак, я начал на своём канале YouTube писать видео по майнкрафту. Это сейчас обзоры моих программ, написанных в майнкрафте или вне него. Небольшой мини-гайд в двух частях по основам мода можете просмотреть сейчас. Остальное ищите на канале. В будущем возможно я туда буду записывать гайды по The Powder Toy и его скриптам на lua. Опыта в этой игре у меня много и есть что рассказать.
  41. 5 баллов
    @Totoro зараза! Ну что ж... вряд ли автор объявится, так что пусть она будет Тоторина, ибо так велит мой бог, нашептывая на ушко. Касаемо оси: кардинально переработана система полноэкранных приложений. При активации режима полного экрана для каждого окна полностью отключается весь интерфейс, за исключением верхней менюхи. Таким образом в полноэкранном режиме приложения пашут с той же скоростью, как если бы они были не зависимы от ОСи. А еще добавлена клевая анимация изменения размеров окон:
  42. 5 баллов
    Бывали ли у вас когда-нибудь такие ситуации, когда необходимо защитить какую-либо таблицу от записи? Например, вы пишите операционную систему в OpenComputers, и хотите хоть какую-то защиту от вирусов. Бедные таблицы всегда в очень большой опасности. С tprotect ваши таблицы будут в безопасности, так как другие программы вместо оригинала таблицы получат её зеркальную копию. А когда вы захотите снова в нее что-то записать, вы сможете это сделать (оригинал же у вас?). Вообщем вот ее код : А теперь документация, а то я пишу код непонятно: function tprotect.protect(table:t):table -- Возвращает "зеркало" таблицы t и её метатаблицу (у "зеркальной" таблицы она неизменяема). "Зеркальная" таблица защищена от записи и всегда является отражением t. Если вы хотите защитить таблицу t, то на публичное (доступное для других программ, от которых вам хотелось бы защитить t) место, где вы ставите обычно таблицу t, ставьте "зеркальную" таблицу
  43. 5 баллов
    Я сделал еще в октябре(31 числа), на форуме чет затишье, решил выложить
  44. 5 баллов
    Предлагаю своё решение. local f = io.open("/etc/program.cfg", "r") local content = f:read("*a") f:close() local cfg = {} assert(load(content, "=program.cfg", "t", cfg))() print(cfg.player) Соответствующий конфиг будет выглядеть тогда так: player = "Robot" robot = "Player" age = 39 alive = false С синтаксисом Луа. Что, согласитесь, выглядит приятно. И не надо запятые ставить, как в таблице сериализованной.
  45. 5 баллов
    во первых, чтобы была конкуретность, а во вторых MineOS это не ось, а граф.оболочка. Эта фраза уже бичом нервов стала, а чертовы доморощенные эксперты-казуисты продолжают лезть изо всех дыр. Элементарная ОСь на платформе опенкомпов состоит буквально из нескольких сот строк кода, реализующих методы работы с файловой системой, позволяющих монтировать физические дисковые носители, грузить библиотеки по предустановленным путям, обрабатывать события и имитировать многозадачность. Все остальное - это графическая оболочка, в моем случае состоящая из десятка тысяч строк кода, вылизанных до предела, чтобы уложиться в строгие рамки ресурсов, выделенных под каждую виртуальную машину в кубаче. Интерфейс майноси с базовым прикладным софтом по типу проводника/настроек/пикчредакторов/магазинов/IDE мы писали с большой командой товарищей около четырех с фигом лет, постоянно его совершенствуя. Эксперимента ради я решил отвязать майнось от опеноси, сделав ее полностью независимой. Это заняло несколько часов. Ценой нескольких, мать их, часов, а также нескольких написанных либ суммарным объемом в две сотни строк майнось стала полностью удовлетворять определению "операционная система", загружаясь с очищенного от скверны жесткого диска и собственного EEPROM. Результат лежит на отдельном репозитории, законсервированный до лучших дней: https://github.com/IgorTimofeev/MineOSStandalone А теперь скажи мне, умник, не кажется ли тебе странным, что вся "ось" пишется на коленке за несколько часов, а "граф. оболочка" - пускай и не годами, но в значительно большие сроки? Может быть, термин "ось" переоценен, и основу современной интерфейсной операционной системы составляет все же графическая оболочка c прикладным софтом? Эх, мяу
  46. 5 баллов
    Кстати о майноси: тут несколько занятных софтин подъехало. Например, YobaКалькулатрон9000, как его окрестил товарищ-шестиклассник. Умеет почти все: от работы с различными системами счисления и побитового редактирования чисел до базовых бинарно-тригонометрических операций с отображением символа по его коду. Во-вторых, слегка обновился местный проводник, заимев удобную панель навигации по текущему пути с кликабельными подпунктами а-ля Винда. Ну, и всякие кнопочки для ручного ввода пути появились, а также фича ресайза тулбара: Ну, и наконец не шибко сложная, однако довольно полезная в быту возможность интерфейсного привата компа по аналогии с useradd:
  47. 5 баллов
    Программка почти не изменилась, просто использует другой тип графика. Конечно тут речи никакой не идет о тонкой линии которая будет чертить график, я использовал то что есть в уже готовой библиотеке. Для работы программы все так-же требуется адаптер. К требованиям компьютера изменений нет, все так-же что запихаешь то и будет работать. Единственное что поменял, это теперь график не имеет никаких ограничений по размерам экрана. Да и вообще никакая информация кроме графика больше не рисуется. Проверка на изменения количества ресурсов в бочке проводится раз в секунду, если изменений нет, график не отрисовывается. График показывается следующим образом: Берется максимально допустимое количество ресурсов, что можно запихать в бочку, и делится пополам. Все что выше половины то отрисовывается зеленым, если уровень ресурсов падает ниже середины, то отрисовка проходит красным. Установка программы в 2 шага: Загрузка библиотеки: pastebin get -f wchQZtZB /lib/charts.lua Загрузка программы: pastebin get -f zjiKv5F0 Graf_drawer.lua
  48. 4 балла
    В этой печали сложно быть одиноким. В Интернете ничего не понявших большинство. Подавляющее. На этом форуме достаточно и тех, кто что-то понимает. И если верно задать вопрос, то кто-то из них даже согласится дать пояснения. Поэтому я сразу предлагаю перейти к основному вопросу: Что именно ты желаешь понять?
  49. 4 балла
    Часто необходимо писать программы для серверов. Это могут быть сервера для чатов, или файловые облака или что то еще, но всегда приходится писать велосипеды. Подумав об этом я решил написать программу для сервера. Программа работает просто. Подгружает модули из папки проекта, а потом начинает слушать все event'ы и обрабатывать. Представляю вам саму программу: Servercore v0.2.1 Исходный код: http://pastebin.com/NASX9sX0 Использование: Создаем папку проекта Создаем в этой папке файл .servercore Запускаем servercore указывая первым аргументом папку которую мы создали. Если не указывать аргумент то servercore запустится в рабочей директории. Наслаждаемся рабочим сервером, который пока ничего не делает. Любые файлы (кроме .servercore) которые находятся в папке проекта будут загружены как модули. Если модуль содержит ошибку наш сервер не полетит, а просто выведет тест ошибки на экран. При создании модулей можно использовать специальные функции, которые находятся в _G.sc. Описание этих функций: sc.info(info_type:string, message:string) - выводит информацию со временем и раскрашивает как на скринах. Принимает тип информации и само сообщение. Типов информации всего 4: ok,err,warn и info. sc.getTime() - возвращает время в формате unix timestamp. sc.on(event_name:string,handler:function) - добавляет слушателя на сигнал. Циклом слушаются все сигналы а потом запускают функцию обработчик для того сигнала который пришел. Пример простейшего модуля: sc.on("touch",function (e) sc.info("info","you touched!")end) Изменения в версии: Патч 1: убрана обязательная поддержка модемов. Старые версии: Произведение «Servercore» созданное автором по имени LeshaInc, публикуется на условиях лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» («Атрибуция — Некоммерческое использование — Без производных произведений») 4.0 Всемирная. PS: Название проги звучит как поджанр метала)))
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...