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

Fingercomp

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

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

  • Посещение

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

    283

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

  1. В какой группе я? Так редко играю или меня интересуют только лагодромы?
  2. Он и так установлен на бумераночке.
  3. Кхм-кхм, кому мне надо писать? Под 1.7.10, извините, но насколько я знаю, поддержки от автора чизеля больше нет.
  4. Ну должна быть, вообще. Вот только лень возиться с гуишками опять.
  5. Ну конечно же, конечно же бомбезный для НЕО, мод-то он и написал! А мы-то совсем не догадались. А вообще, поживём — увидим.
  6. Fingercomp

    Пара трюков OpenComputers

    Пришлось вернуться к os.clock: аптайм давал неточное время. Мы можем здесь положиться на клок, так как этот код не будет делать yield во время слипа, только при вынужденном торможении (и тогда разность будет незначительна).
  7. Ох ё. Срочно обновил список — пропишите oppm uninstall smap и oppm install smap. >_> Ну и раз я пишу пост, о работе. Базовые команды: smap.load(path: string, format: string) — загрузить файл по данному пути данного формата ("midi" / "nbs"). Возвращает объект Music, которые далее будет переменной music. smap.device(name: string) — получить экземпляр устройства ("inoteblock" ­— железный нотный блок, "pcspkr" — computer.beep(), "beep" — Beep Card). music:connect(device: Device) — подключить экземпляр устройства. music:play(ticks: number): [nil, reason] — проиграть мелодию заданное количество тиков. Можно поставить math.huge. music:seek(pos: number) — переключить буфер в треке и сбросить позицию буфера до 1. Например, music:seek(1). music:getPos(): number — возвратить текущий буфер. music:getLength(): number — получить длину трека (данную функцию следует вызывать после загрузки всех буферов). music:close() — освободить память.
  8. Только что буквально починили midi — звук НЕМНОООООГО, но похож на тот, что нужен. Правда, из-за переносов октав вверх/вниз, непоятных инструментов и сложных нот, звук может (и будет) отличаться от оригинального. Сейчас надо починить игру в фоне для всяких игрушек, например, ну и ещё прикрутить какой-нибудь формат файлов музыкальных, кроме миди и nbs.
  9. "Спасибо", а то я сооооовсеем не знал о ней. Ага. Есть трек, он хранит буферы, буферы хранят акккорды, которые хранят ноты. А почему "вымышленный"? Не на одних MP3 и MIDI мир сошёлся. Не вижу ничего плохого в своём формате — а иначе как абсолютные разные файлы проигрывать? Я так понял, что ты вообще моё сообщение не читал нормально.
  10. Да ноты-то я знаю, сам на пьянине играл. Бемоледиезы в ту же топку. Есть внутренний формат, который хранит ноты, а не волну. Точней сказать, аккорды — массив массивов с заданной продолжительностью, тиком, частотой и инструментом (пока только пять, сменить легко). Теперь нужны внешние — какой-нибудь простой для декодинга и понимания не помешал бы. Ну и более-менее популярный.
  11. В активной разработке (а как же иначе, если на кону стоит эта штука) сейчас находится такая библиотека, как smap — акроним от simple minecraft audio player. Взялся я за такую тему, в которой я почти полностью нуб. Какие-то чертовски непонятные спецификации на миллионы строк для одного только формата, волны морские звуковые, которые как-то надо играть нотами. Что есть? Поддержка computer.beep(). Поддержка железных нотноблоков из Computronics (одного хватит). Поддержка Beep Card из Computronics (однако, не тестил). MIDI — ужасно кривая реализация, так как был скопирован большой объём кода из программы Sangar, а затем кое-как переделан, не имея понятися о работе кодека. NBS — использовал программу TxN для того, чтобы не копаться в очень скудной спецификации формата... на C#... Ну там всё довольно просто, к тому же даже умудрился прикрутить загрузку файла во время игры, Что надо? Хороший вопрос, ибо единственный ответ — это цель проекта. "Возможность играть многие форматы аудио в Minecraft на разных устройствах". Так что тех, кто разбирается в кодеках, музыке и тому прочем, прошу помочь мне с этим плеером несчастным. Парсинг файлов музыкальных, куски кода на Луа, ссылки на реализации чтения форматов на языках программирования иди даже Pull Request'ы (O.o). Сама библиотека лежит здесь: https://github.com/OpenPrograms/Fingercomp-Programs/tree/master/smap/smap, которую можно скачать на компьютер OC с помощью OPPM: oppm install smap. Пример использования библиотеки: -- Подключаем библиотеку local smap = require("smap") -- Загружаем аудио-файл local music = smap.load("/home/music/NyanCat.nbs", "nbs") -- Создаём объект выходного устройства (inoteblock — железный нотный блок) local outputDevice = smap.modules.output.inoteblock.new() -- Подключаем устройство music:connect(outputDevice) -- Играем музыку до конца print(music:play(math.huge)) И хотя обычно темы о помощи вообще никакого резонанса не делали — неинтересно другим, — я всё-таки надеюсь на помощь.
  12. Fingercomp

    Пара трюков OpenComputers

    Верно, правда, почему-то решил, что в machine.lua используется время компьюетра. Но нет. В конфигурации OpenComputers есть настройка timeout, равная 5 реальным (не игровым) секундам по умолчанию. Обновил код.
  13. Fingercomp

    Пара трюков OpenComputers

    Здесь опишу такие штучки, которые могут потребоваться продвинутым OC-программистам (да и просто Луа-программистам). Busy Idle С помощью этого трюка можно делать довольно точные задержки, причём с длительностью менее тика. local lastSleep = os.clock() local function sleep(t) local begin = os.clock() while os.clock() - begin < t do if lastSleep - os.clock() >= 3.5 then -- В конфигурации дефолтное значение = 5 секунд, ставим на 1.5 меньше для безопасности. os.sleep(0.05) -- Вынужденная задержка. lastSleep = os.clock() t = t - 0.05 end end end Проверка по значению Очень часто в моих программах нужно найти ключ, значение которого соответствует данному. Для этого я написал простую функцию: local function isin(tbl, value) for k, v in pairs(tbl) do if v == value then return true, k end end return false end На огромных массивах может и затормозить — скорость работы прямо зависит от длины массива. Табличная магия Рассмотрим этот на первый взгляд обычный пример кода: local tbl1 = {"My", "super", "table", 42} local tbl2 = tbl1 tbl2[2] = "cool" for _, tbl in pairs({tbl1, tbl2}) do -- Напечатать значения таблиц for k, v in pairs(tbl) do print(k, v) end end Разумно ожидать такое: 1 My 2 super 3 table 4 42 1 My 2 cool 3 table 4 42 Но вместо этого получаем: 1 My 2 cool 3 table 4 42 1 My 2 cool 3 table 4 42 Как видно, изменив значение в одной таблице, изменилась и другая. Дело в том, что переменная хранит указатель на таблицу, а не саму таблицу. Соответственно, и tbl1, и tbl2 ссылаются на один и тот же массив. На первый взгляд это кажется ненормальным. Как скопировать-то таблицу? local function copy(tbl) if type(tbl) ~= "table" then return tbl end local result = {} for k, v in pairs(tbl) do result[k] = copy(v) end return result end Но из этого можно извлечь очень полезное применение. Когда мы передаём таблицу в аргументы функции, массив не копируется, а даётся указатель на тот же самый. Поэтому можно сообразить такой код: local function removeOddNums(tbl) for k, v in pairs(tbl) do if tonumber(v) and v % 2 == 1 then tbl[k] = nil end end end local table = {5, 26, 249586, 457139, 876, 42, 153} removeOddNums(tbl) И он будет работать. Этим и объясняется, почему table.sort не возвращает таблицу. У меня не самое полезное применение, однако с помощью таблицы можно создавать "поинтеры", например, так: local numPtr = {42}, а в функциях использовать так: local value = numPtr[1]; numPtr[1] = 666. И уже использовать их в своих вычислениях. Думаю, вы найдёте применение этим фокусам. Не самые очевидные моменты, однако иногда требуется. The end.
  14. Для 1.7.10 формулы абсолютно другие для посчёта. См. банку опыта: http://computercraft.ru/topic/955-%E2%9C%93-zakaz%E2%84%96005-zavershen-bank-opyta-admin-zakaz-pe/page-2?do=findComment&comment=13082
  15. Да забудь ты про ОпенБлоки, как про страшный сон, и не вспоминай о нём больше на форуме. Интерфейсы, работающие на магии — раньше мне это тоже интересно было, но сейчас хочется самому знать, как работает. Компьютерные интерфейсы нужны.
  16. Выяснили с @cogor в #oc, что есть команда "saveConfiguration", которая, будучи посланной, копирует конфигурацию в наномашины в инвентаре. Копирую и сюда, чтобы знали Бомбофича.
  17. Коммит от 02/10/2015: Allow saving nanomachine configuration to other nanomachines in player's inventory. Closes #1462. Итак, не описанная нигде команда "saveConfiguration" копирует конфигурацию наномашинок в другой предмет в инвентаре. По-моему, это круто.
  18. Ну допиливай и выкладывай, если хочешь. Посмотрим. Квест только меня на ИТ поймать Кликните в ирке, если что, если я на ИТ нужен.
  19. Прошу простить и извинить. Недочитал пост первый, подумал, что это вопрос был задан, а не прога, и потому пошёл писать я на коленке Ну тогда норм, читаемость поправь только.
  20. Ааааааа! Нет слова "autors"! Есть "authors"!! Так, ладно. https://gist.github.com/Fingercomp/3975221042e4e16c83d7a5f6fceed0d1 — подключаешь библиотеку и работаешь: local addMethod = require("addmethod") local a = {} addMethod(a, "hello", function() return "Hello, world!" end, "function():string -- Returns \"Hello, world!\"") print(a.hello) print(a.hello())
  21. Без редактирования NBT-данных игроков — никак. Наномашины в предметах не хранят конфигурацию, она получается при съедении.
  22. В YouTube по CX поищите просто "Computronics гайд", там единственный видеогайд имеется, к счастью, на русском. Может помочь.
  23. Мне ещё раз повторить?.. Другой формат — другая прога.
  24. Использование телепортаторов я бы приравнял к читу в данной ситуации — какой-то левый мод ещё. Я бы в качестве перетаскивателя предложил офигительнейший вариант — дроны, которые прямо созданы для быстро перемещения предметов в том числе. Но минус конструкции этой вы все знаете По роботу на реактор — извольте, это слишком дорого, к тому же, чем больше компов загружено, тем больше вероятность, что сообщения могут не доходить, роботы падать с TLWY и прочие нежелательнейшие фиговины. Транспозер выглядит круто, но надо транспортировать как-то. Как верно заметил @eu_tomat, скорость в данной конструкции не слишком важна. Вот вариант схемы: компьютер считывает переодически показания с транспозеров, посылая робота туда, куда надо. Экономим время робота и ускоряем мониторинг.
×
×
  • Создать...