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

Doob

Гуру
  • Публикации

    1 089
  • Зарегистрирован

  • Посещение

  • Победитель дней

    141

Все публикации пользователя Doob

  1. Для большего эффекта, надо использовать прямоугольный сигнал, будет полный трэш. https://en.wikipedia.org/wiki/Noise_music
  2. Все это есть в ТФК. И баланс элементов в почве/организме, и реалистичный крафт, и улучшенная механика износа (еще бы медицину и было бы вообще замечательно). Но играя с одним ТФК модом, даже пусть там игроки делятся на классы, развитие происходит очень быстро - один человек, не торопясь, за неделю разовьется до стали, построит фермы и укрепления. Поэтому, нужен мод, который будет добавлять нормальные скрытые механики и усложненные крафты (не просто рецепты типа "хлеб = мука+сахар+соль+дрожжи", а умение делать ту или иную вещь). Либо нужен технический аддон к ТФК, чтобы каждый следующий уровень технологий достигался усилиями, многократно превышающими все предыдущие.
  3. Не, тут нужна система скиллов, любой Вася Пупкин может быть одновременно электриком, садоводом, охотником, строителем и т. д. Как сказали NEO и Stateg, надо усложнить все процессы, чтобы эффективно выполнять задачу мог только игрок с прокачанным умением, тогда игроки будут сами распределять профессии, как во всех RPG А роботы слишком все упрощают.
  4. Дело в том, что переменная address создается в функции touch, вне функции она не видна, поэтому ее следует объявить в начале программы, тогда она будет видна для всех функций. Код слишком громоздкий, адреса/кнопки лучше как-нибудь упаковать отдельно, отрисовку рамок можно сделать за две операции gpu.fill.
  5. В ценooбразoвании неразумнo oтдавать власть игрoкам, т. к. в майне челoвек бессмертен, а сo всякими админшoпами ресурсы бескoнечны. Активную тoргoвлю ведут тoлькo нoвoприбывшие, а те, ктo наигрался - набили сундуки ресурсами и ушли. Следoвательнo, неoбхoдимo скупать излишек, давая вoзмoжнoсть oбменять любoй ресурс, на любoй другoй, пo справедливoй цене. У меня давнo все гoтoвo, некoгда зайти на сервер и устанoвить терминал. Прoграмма прoста как палка - пoкупает/прoдает ресурсы, рассчитывая стoимoсть на oснoве спрoса-предлoжения, пo такoй фoрмуле: (1/(купленo-прoданo)+(прoданo/купленo))*мнoжитель т. е. "прoданo" - кoличествo тoвара, прoданнoгo игрoками, "купленo" - спрoс на тoвар, "мнoжитель" - числo, кoтoрoе пoзвoляет представить стoимoсть в виде натуральнoгo числа. Например, у нас есть три тoвара (множитель: 1000): Бусы, прoданo: 1000, купленo: 50, стoимoсть: 52 Джинсы, прoданo: 500, купленo: 50, стoимoсть: 103 Булыга, прoданo: 100500, купленo: 64, стoимoсть: 1 Для защиты oт спекулянтoв, пoсле сoвершения сделки, есть небoльшoй кулдаун и текущая стoимoсть меняется не сразу, а на oдну единицу приближается к реальнoй, пoсле каждoй сделки. Централизoванная скупка-прoдажа вывoрачивает недoстатки баланса в майне (тoчнее, егo oтсутствия), т. к. ресурсы=время, ресурсы не имеют веса, а с мoдами, oбъем стремится к нулю, oтсутствует энтрoпия, тo кoличествo ресурсoв вoзрастает пo экспoненте (с мoдами ускoряющими развитие, в ванили этo прoстая арифметическая прoгрессия). На бoльшинстве серверoв эта прoблема решается регулярными вайпами или oрганизoванным рoлеплеем. В плане баланса, есть oчень хoрoший мoд TerraFirmaCraft, для пущегo эффекта, мoжнo былo бы снизить кoличествo мoбoв и включить режим хардкoр, чтoбы игрoки бoлее oтветственнo oтнoсились к свoей тушке и мoгли умереть тoлькo пo сoбственнoй невнимательнoсти. Были планы сделать рынoчный мoд, как на некoтoрых серверах, нo не давать игрoкам устанавливать цены, нo т. к. этo надo сделать удoбнo, в стиле ванильных инвентарей, тут есть риск дюпа, а дюп в майне - вещь непoзнаваемая, фиксы надo штампoвать без oстанoвки. В плане безoпаснoсти хoрoшая вещь - дебаг-карта, нo не слишкoм удoбнo тoргoвать через чат - прихoдится вбивать внутреннее имя предмета, метаданные, кoличествo. Затo, мoжнo привязать к экoнoмике кучу магических штук, типа убийства мoбoв, т. к. этo тoже время, кoтoрoе мoжет быть вoзнагражденo. Пoследнее решение - физический терминал, т. е. тoргoвый автoмат, самoе неудoбнoе решение, т. к. игрoкам для сoвершения oперации прихoдится сoвершать пoхoд на рынoк, ждать, кликать на кнoпки, руками брoсать/пoдбирать тoвар (ибo классная пимка - дюп-машина). Хoтя, на нашем сервере рекламу развернуть не труднo - пoдключить бoта к чату через IRC и слать сooбщения раз в 10 минут. На паре серверoв развoрачивал рынoк, oбъединенный с увеселительным заведением (пoкер, рулетка, блекджек), нo игрoки в oснoвнoм тoлькo прoдавали, изредка пoкупали, а играть никтo не хoтел. Тут винoй челoвеческая жаднoсть - циферки на счету, как ресурсы, кoпятся для услаждения взгляда. Ну и кoнечнo, этo был тoпoрный кoмпутеркрафт и фoрмула была дoвoльнo глупая - в расчет бралась куча лишних параметрoв, врoде средней пoкупательскoй спoсoбнoсти и перерасчет стoимoсти всех тoварoв, на oснoве самoгo дешевoгo.
  6. Прикостылил команду /size - меняет размер чата (/size 1 - большой, /size 0.5 - поменьше ) Когда-нибудь, надо будет написать нормальный клиент, а пока, если нужны какие-то костыли - обращайтесь.
  7. Не смог найти, прикрутил очки к стандартному. pastebin get FtKY6prR /bin/irc_g.lua Надо будет довести до ума, а то функционал прямо-таки топорный.
  8. Не особо оно и проблемно, если сообщения собирать, упаковывать и отправлять раз в N секунд, то можно обойти защиту. А запустить сервер или найти подходящий, тоже не сложно. Ну и смотря какие данные передаются, если какие-то управляющие команды, то не страшно. А передавать нажатия клавиш или работать с файловой системой это уже критично по времени, тут нужны специализированные подходы.
  9. Иногда надо связать несколько компьютеров на большом расстоянии или между мирами, или даже между серверами. Так как у нас есть интернет-карта, можно провернуть несложный хак - пустить информацию через внешний сервер. Но чтобы не писать серверную часть, можно использовать готовый протокол с готовыми серверами. Получается крутая связанная карта для многих компов. Данная программа реализует IRC мост, по которому могут общаться не только опенкомпы, но и любые устройства с интернетом. Например, можно с мобильника дать команду своим компьютерам на нескольких игровых серверах. Использование: Скачать программу pastebin get CmLFFF7g /bin/imodem.lua Проверить наличие интернет-карты в компьютере Запустить программу imodem В течении некоторого времени будет устанавливаться связь, а затем можно работать с модемом. Чтобы послать сообщение всем устройствам на канале, есть функция imodem.broadcast( сообщение: строка ) Чтобы послать сообщение по определенному адресу - imodem.send( получатель: строка, сообщение: строка ) Для разрыва связи и прекращения работы - imodem.stop() А чтобы принимать сообщения, достаточно ловить событие modem_message, как у обычных модемов. Адрес сервера и канал можно изменить в коде программы, желательно иметь сервер без обрезания ников и защиты от флуда.
  10. Берем дискету OpenOS и ключ, суем это в верстак, пока не получим дискету 'IRC'. Вставляем дискету в комп, пишем install irc Пишем irc <ник>, ждем подключения. Пишем /join <канал> и получаем чат. Очки прикрутить не намного сложней, даже видел где-то готовый клиент.
  11. GPS это куча оборудования, трата энергии и времени, но иногда может понадобится там, где нет встроенного акселерометра, как у робота. Попробуем разобраться, как настроить и построить сеть спутников, по которым можно вычислить свои координаты. Где-то была готовая программа, но я ее не нашел, поэтому восстановил основной функционал, по примеру КомпутерКрафта. Для начала нужен компьютер с установленной OpenOS. Скачиваем для него программатор хостов: pastebin get ZD8GysNP /bin/fgps.lua Эта программа позволяет устанавливать прошивку для спутников-микроконтроллеров, которые будут рассылать свои координаты по запросу. Далее, соберем несколько микроконтроллеров с беспроводными картами, при необходимости обеспечим их энергией. Теперь надо установить прошивку для первой партии: узнаем координаты, где будет стоять очередной хост вставляем EEPROM в компьютер запускаем программатор, с указанием координат через пробел (например: fgps 1652 64 -152) Прошитые карточки вставляем в микроконтроллеры (в сетке крафта) и расставляем в соответствии с координатами, указанными при прошивке. Самое главное - не перепутать координаты. Если навести курсор на микроконтроллер и зажать LSHIFT, то будет виден лейбл биоса, который является подсказкой для его позиции. Когда первая партия размещена и активированна, остальные хосты можно прошивать без указания координат - они определят позицию сразу при включении (если они будут в радиусе действия четырех рабочих хостов) Но лучше, конечно, чтобы каждый хост знал свои точные координаты. Ибо в случае небольшой ошибки в начале постройки, по мере расширения сети, погрешность будет увеличиваться, т. к. поправка будет производится по неверно вычисленным координатам хостов. Теперь проверим работу системы в деле. Возьмем, например, планшет с беспроводным модемом. Скачаем библиотеку GPS: pastebin get Dja9ZceV /lib/gps.lua Запустим консоль Lua. Загрузим библиотеку: local gps = require('gps') И попробуем получить координаты: gps.locate(true) (параметр DEBUG передаваемый в функцию работает как и в ComputerCraft - выводит все вспомогательные сообщения) Каждый хост, при старте устанавливает wake-up сообщение и включается только чтобы ответить на запрос координат. Такой подход экономит огромное количество энергии и позволяет добиться полной автономности хостов - встроенной солнечной панели вполне хватает для работы. Для стабильной работы надо будет добавить data-карту и реализовать протокол управления спутниками по прошитому открытому ключу, чтобы удобно было прошивать новые координаты при перемещении хоста на новое место.
  12. Doob

    Sound card / звуковые волны, модуляция

    Все это довольно неплохо, но модуляция довольно простая тема, да и нагуглить не долго. Можно, конечно, собрать генератор семплов и играть чиптюн, но это довольно скучно. А вот как прикрутить фурье-функцию, чтобы можно было работать с несколькими картами, тут придется жонглировать бензопилами. Я не придумал, как создавать иллюзию на весь спектр. Надо очень точно синхронизировать звуковые карты между собой, но как это сделать в условиях лагучего майна - непонятно.
  13. Тут видео надо, писать видео не могу, ибо негде писать звук.
  14. Можно даже не изобретать велосипеды. https://github.com/Nex4rius/Nex4rius-Programme/blob/master/Stargate-Programm/README.md#russian
  15. Кнопки, это самый распространенный элемент интерфейса, и не потому, что их полно в каждой графической программе. Функционал кнопки наследует большинство средство ввода, например: ссылки, переключатели, ползунки, менюшки и т. д. Сейчас, огромные возможности для создания других, более подходящих ситуации способов ввода, но традиционно используются кнопки, которые появились в первых электронных устройствах, т. к. они просты и интуитивно понятны. Внешний вид. Обычная кнопка имеет прямоугольный вид, это позволяет не заморачиваться с алгоритмом взаимодействия, удобно отображать на ней текст/изображения, но если необходимо, ее можно сделать какой угодно формы. Самое главное в кнопке это ее интерактивность, т. е. она должна не только выполнять функцию, для которой назначена, но и сигнализировать свой статус (иметь обратную связь). Например, при нажатии на кнопку, она меняет цвет/визуально проваливается/издает звук, все это вместе или по-отдельности дает пользователю знать, что она активирована, а цветом или звуком можно даже передать состояние выполнения задачи, выполняемой этой кнопкой. А вот если пользователь нажимает на кнопку и ничего не происходит, то он может клацнуть по ней еще много раз, пока кнопка будет выполнять задачу. В большинстве случаев это довольно опасно - накликают беду, а винят программиста. Поэтому, если в текущей ситуации кнопка неактивна, надо это подчеркнуть, например, обесцветив ее или частично слив с фоном, можно дополнить специальным звуком. Все это очевидно, поэтому не стоит об этом забывать. Внутреннее устройство. В графическом интерфейсе, кнопка это определенно обозначенное место на экране, в которое нужно тыкнуть, чтобы получить определенный результат, обозначенный на кнопке в виде текста/изображения или понимаемый из контекста. Как это реализовать в OpenComputers? Нам доступен вывод информации на монитор, посредством компонента GPU. Пока рассмотрим функции назначения цветов и вывода символов. Работа с видеокартой. Список методов видеокарты можно посмотреть на вики. Для назначения цвета текста используется метод setForeground. А чтобы задать цвет фона, есть метод setBackground. Чтобы проверить, как это работает обратимся к компьютеру с установленной OpenOS. Запустим компьютер. Вводим команду edit gpu_test.lua, так мы запускаем текстовый редактор OpenOS, указывая, что нужно редактировать файл gpu_test.lua. Пока этого файла нет, но когда в редакторе нажмем Ctrl+S он сохранится. Чтобы мы могли обратится к компоненту gpu, нам надо загрузить обертку для компонентов, предоставляемую OpenOS, она немного облегчает работу. Для этого, в самом начале программы пишем local component = require('component'), так, что это за письмена? Эта строка создает локальную переменную (указываем словом local перед именем переменной), далее указываем имя переменной. Знак равенства указывает, что в переменной теперь будет хранится то, что дает функция require, в данном случае мы задали этой функции передать переменной component возможности обертки, которая тоже называется component. Так будет удобней понимать, к чему мы обращаемся. На следующей строке пишем local gpu = component.gpu Это мы назначили переменной gpu все методы видеокарты, т. е. теперь можем обращаться к ней через эту переменную. При загрузке, OpenOS сделала несколько скрытых операций: определила основную видеокарту, подключила ее к монитору и добавила их к остальным компонентам, чтобы можно было обратиться по имени компонента и получить готовый интерфейс. Итак, видеокарта готова к работе, теперь опишем, что она должна сделать. Создаем переменные, содержащие информацию о цветах и тексте, с которыми мы будем работать. local color1, color2, text = 0xff00ff, 0x0000ff, 'Hello, OpenComputers!' При помощи параллельного присваивания мы задали две переменные с числовыми значениями цветов и переменную с текстом. Теперь создадим простой цикл, в котором выведем текст на экран, назначая цвет текста и цвет фона. for i = 1, 10 do gpu.setForeground(color1) gpu.setBackground(color2) gpu.set(10, 5, text) color1, color2 = color2, color1 os.sleep(0.5) end Сам код назначает тексту цвет, указанный в color1, а фону color2, затем выводит текст, содержащийся в переменной text на монитор, указывая координаты первого символа (от левого верхнего угла 10 символов в право, 5 символов вниз). Далее, параллельным присваиванием, меняем значения переменных местами, чтобы при следующем выполнении кода, цвета фона и текста поменялись. В конце цикла ставим задержку в пол-секунды, используя системную функцию sleep. Цикл готов, теперь, в конце программы стоит добавить восстановление цветов текста и фона, т. к. по завершению ее работы, цвета останутся такими, которые были назначены в последний раз. Готовый алгоритм будет примерно такой: Нажимаем Ctrl+S, чтобы сохранить файл, затем Ctrl+W, чтобы закрыть редактор. Теперь мы снова попали в шелл. Вызываем только-что созданную программу по имени: gpu_test, и наблюдаем ее выполнение. Так как координаты вывода жестко заданы, мы видим, что текст как-бы мигает. Чтобы увидеть эволюцию работы цикла, можно к координатам вывода добавить значения шага цикла. Для этого откроем файл edit gpu_test.lua, в функции gpu.set к каждому числу прибавим переменную-итератор. Теперь вызов функции gpu.set выглядит вот так: gpu.set(10+i, 5+i, text), сохраним изменения (Ctrl+S), закроем (Ctrl+W), и опять запустим тестовую программу gpu_test Работа с вводом. Со способом вывода информации более-менее разобрались, теперь разберемся с вводом, т. к. мы хотим создать графический интерфейс, хоть и 'псевдо', мы будем использовать возможность сенсорного ввода, клавиатуру поставим для других задач. Монитор I уровня это только средство вывода, а мониторы второго и третьего уровня могут работать и как средство ввода. Когда игрок прикасается к экрану, генерируется сигнал touch, содержащий в себе адрес монитора, координаты касания, код кнопки мыши и ник игрока. Нам остается отследить это событие и соответсвующим образом на него отреагировать. Для демонстрации работы напишем небольшую тестовую программу, которая будет ловить события касания экрана, отображать место и числовые координаты. Создаем файл edit click_test.lua Первым делом подключаем управление видеокартой local gpu = require('component').gpu Затем, подключим мониторинг событий, который предоставляет OpenOS. local pull_e = require('event').pull Общая документация тут, мы воспользуемся только одной функцией. Теперь позаботимся о пользователе, чтобы при завершении программы цвет фона остался такими же, как и перед запуском, мы его сохраним в переменную: local b_color = gpu.getBackground() Эта функция сообщает цвет фона, который сейчас используется, для цвета текста есть getForeground, но в данном тесте мы будем управлять только цветом фона. Так как у мыши две кнопки, в событии touch указывается код кнопки: ЛКМ = 1, ПКМ = 0 Чтобы визуально различать касания, создадим таблицу с цветами для каждой кнопки. В качестве индекса будет использоваться код кнопки. local color = {[0] = 0x00ff00, 0x0000ff} т. е. ЛКМ будет обозначаться синим, ПКМ - зеленым. Теперь создадим цикл, в котором будем ловить и обрабатывать события. while true do Как следует из описания функции event.pull, можно фильтровать ненужное, передав в функцию название интересующего нас события. Так как возвращается довольно много переменных, будем создавать из них таблицу, для большего удобства. local tEvent = {pull_e('touch')} Теперь все события типа touch будут пересоздавать таблицу tEvent, в которой будет заключена информация об этом событии. Обратиться к интересующей информации можно, указав номер, в той же последовательности, как это описано в документации по сигналам Для начала добавим условие выхода из программы, т. к. цикл бесконечный и прервать его можно только грубо нарушив выполнение программы. if tEvent[3] == 1 and tEvent[4] == 1 then Если клик произошел по координатам (1, 1), выполнить следующий код: gpu.setBackground(b_color) - вернем фону его первоначальное значение, полученное при запуске программы. os.exit() - вызовем системную функцию выхода из программы. Закроем условие: end А теперь опишем сам процесс отклика на касание. Присваиваем фону цвет, исходя из полученного кода кнопки мыщи: gpu.setBackground(color[tEvent[5]]) Устанавливаем по полученным координатам символ пробела, чтобы подсветить фон: gpu.set(tEvent[3], tEvent[4], ' ') Затем, по координатм (1, 1) показываем информацию о событии: gpu.set(1, 1, 'x: '..tEvent[3]..' y: '..tEvent[4]..'\t\t') В конце добавляется пустое место, чтобы не заморачиваться с затиранием предыдущих значений. Закрываем цикл end В итоге получается такой код: Сохраним и запустим программу. Кликая мышкой по монитору мы видим, как она оставляет следы и обновляется информация в левом верхнем углу. Кликнув в левый верхний угол мы завершаем работу программы. Значит, мы между делом создали кнопку, хоть и невидимую. Принцип работы очень прост - пользователь кликнул по экрану, а программа сравнила координаты клика с координатами кнопки, если они совпали, то выполняется код, назначенный для этой кнопки. Теперь создадим нормальные кнопки, с более удобной конфигурацией. Все кнопки будут находиться в таблице, при каждом клике будем в цикле обходить таблицу, проверяя координаты. Дополнительно напишем пару функций - одна будет подсвечивать нажатую кнопку, другая переключать видимость. Каждая кнопка будет содержать следующие параметры: статус отображения (т. е. активна кнопка или нет), координаты, размер, цвет фона кнопки, цвет текста, текст и исполняемую функцию. { visible = boolean, X = number, Y = number, W = number, H = number, color = number, textColor = number, text = string, action = function } Загрузим видеокарту и захват событий. local gpu = require('component').gpu local pull_e = require('event').pull Для того, чтобы очистить экран при запуске и поставить кнопку выхода в угол, нам понадобится узнать и сохранить текущее разрешение. local W, H = gpu.getResolution() Сохраняем цвета фона и текста, чтобы вернуть их при завершении программы. local b_color, f_color = gpu.getBackground(), gpu.getForeground() Создаем таблицу tButtons, в ней мы будем хранить все кнопки. Добавляем кнопку выхода из программы: Изначальное состояние кнопки: visible = false, Устанавливаем кнопку в правый верхний угол, задаем размер в один символ: X = W, Y = 1, W = 1, H = 1, Устанавливаем цвета: color = 0xff0000, textColor = 0xffffff, Задаем символ: text = 'X', Функция завершения программы немного изменилась - устанавливаются первоначальные цвета, очищается экран и вызывается функция выхода. action = function() gpu.setBackground(b_color) gpu.setForeground(f_color) gpu.fill(1, 1, W, H, ' ') os.exit() end Опишем функцию рисования кнопки, в которую будет передаваться индекс кнопки. local function drawButton(n) задаем цвет кнопки gpu.setBackground(tButtons[n].color) задаем цвет текста gpu.setForeground(tButtons[n].textColor) заливаем прямоугольник, который занимает кнопка (в данном случае, берем координаты и размер кнопки из ее таблицы) gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') для большей красоты отцентрируем текст по границам кнопки, для этого вычислим половину высоты и половину ширины кнопки, прибавим их к координатам кнопки, а у ширины еще отберем половину длинны текста gpu.set(tButtons[n].X+(tButtons[n].W/2)-(#tButtons[n].text/2), tButtons[n].Y+(tButtons[n].H/2), tButtons[n].text) закрываем функцию end Добавим переключение видимости кнопки. local function toggleVisible(n) if tButtons[n].visible then если кнопка видима, то изменим статус tButtons[n].visible = false установим цвет фона на тот, который был при запуске gpu.setBackground(b_color) зальем прямоугольник фоновым цветом gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') else иначе: изменим статус tButtons[n].visible = true вызовем отрисовку этой кнопки drawButton(n) закроем условие и функцию end end Чтобы кнопка подмигивала при активации, создадим функцию меняющую цвет фона и текста, как в первом примере. Для получения и назначения цветов обратимся к параметрам кнопки по индексу, как и в прошлых функциях. меняем цвета tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color рисуем кнопку drawButton(n) делаем задержку os.sleep(0.09) возвращаем цвета tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color заново рисуем кнопку, с номальными цветами drawButton(n) Функции описаны, теперь напишем саму программу. При запуске очистим экран gpu.fill(1, 1, W, H, ' ') Можно вынести ее в отдельную функцию, но в данном примере очистка вызвается только два раза - при запуске и при выходе. Теперь активируем все нужные кнопки. В данном примере можно запустить все кнопки, поэтому пройдем в цикле по таблице с кнопками и для каждой вызовем переключатель видимости. for i = 1, #tButtons do toggleVisible(i) end И опишем главный цикл. while true do ловим событие в таблицу tEvent local tEvent = {pull_e('touch')} перебираем все кнопки for i = 1, #tButtons do если кнопка видима if tButtons.visible then сравниваем координаты клика с прямоугольником кнопки if tEvent[3] >= tButtons.X and tEvent[3] <= tButtons.X+tButtons.W and tEvent[4] >= tButtons.Y and tEvent[4] <= tButtons.Y+tButtons.H then если клик попал по этой кнопке, заставляем ее мигнуть blink(i) выполняем функцию, которая назначена для нее tButtons.action() прерываем цикл проверки кнопок break закрываем циклы и условия end end end end На этом все, программа готова, в готовом примере я добавил три кнопки - 'set' выводит строку, а 'del' стирает и бибикает спикером, 'reboot' перезагружает компьютер.
  16. Я хотел предложить 1D арену, намного меньше возни, а возможности те же, что и на текущей.
  17. Еще обязательно наличие аддона OpenPeripheral, без него блоки из модов имеют только функционал сундука.
  18. У меня давно есть готовый каркас, ни одну нормальную стратегию не придумал, кроме как прятаться на спавне. Предлагал игрокам поучаствовать, но никто не заинтересован. Видимо, сама идея не подходящая, у конкурсов должен быть самый низкий порог вхождения, с постепенным повышением, чтобы захватить как можно большую аудиторию. Но организаторы как всегда, делают не для людей, а для своего развлечения.
  19. Doob

    Палитры OpenComputers

    Отлично! Давно хотел написать статью по работе с цветом. А теперь можно просто оставить ссылку, т. к. все основы хорошо разобраны.
  20. Бомбы появились почти перед самым запуском, это радует. Но как видно, арена маленькая и укрытия не слишком надежные, пушки потребляют довольно мало. Теперь ясно, что требуется от роботов и вообще, есть общее представление. Сам вряд-ли буду участвовать, но отдам код любому желающему.
  21. Если бы все было нормально подготовлено и запланировано, то в целом, очень неплохо. А 3-12 FPS отбивают желание двигаться с места, к тому-же чизель... Новый майн и чизель. Как-будто нет дебаги и ванильных блоков. Можно с большим успехом воскресить мой лабиринт, благо, компьютерных квестов накопилось достаточно, проблема только с задержкой при телепортации в 1-2 тика, которая портит ощущение присутствия. На дезматч попасть не смогу, но даже если б смог, не пошел бы. Слишком лагучая сборка, да и участников нет. Стоит развить тему компьютерных квестов, придет больше народу не только смотреть, но и участвовать. Конечно, надо все нормально проработать, как то: не гонять всех в принудительном порядке одним табором, отрубить чат, сделать больше интерактивности и скрытых возможностей.
  22. Цырк! Участников нет! Дохлые тигры! Иллюзионисты-перевертыши! Предлагаю переоформить концепцию - создавать программы в реальном времени, в течении, например, трех дней. А по завершении указанного срока запускать соревнование. Тогда это будет похоже на настоящий конкурс и у участников будет хоть какой-то стимул закончить начатое.
  23. Ха, только что хотел сделать такой же велосипед. Только это не шрифт Брайля, а псевдографические символы предназначенные для вывода монохромных изображений, a путем нехитрой манипуляции можно сделать их цветными (дикое смешивание цветов, хуже чем jpeg, но для рекламных панелей сойдет).
  24. Если загружать мир и необходимые параметры, разбивать кадр на несколько частей и рендерить на нескольких компах, тогда не так сильно будет влиять ограничение процессоров и разрешение можно сделать больше, хотя бордюры у мониторов будут все портить. Но как по-мне, эффективней рендерить на реальном сервере, подавая готовую картинку опенкомпам через интернет карту. Таким образом, опенкомп будет освобожден от уймы вычислений и занят только отрисовкой. Чтобы повысить интерактивность можно снизить пинг - производить вычисления на той же машине, на которой работает MC сервер.
  25. При вызове функции сканирования надобно указывать дальность, тогда все нормально. Таблица вполне очевидная, в ней лежат таблицы с информацией о найденых игроках. Документация довольно бедная, но потыкав любой блок через OpenOS можно во всем разобраться. https://github.com/PC-Logix/OpenSecurity/wiki И да, сканирование сущностей не работает, никто не знает почему, даже сам автор. После трех сканов, блок перестает выдавать инфу.
×
×
  • Создать...