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

Лидеры


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

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

  1. 4 балла
    Lost User - Самый Простой Робот Зачем? Роботы OC сложны в сборке и программировании. Эта программа BIOS помогает использовать роботов как "пользователей" и многими другими способами. Установка Сборка Соберите робота в минимальной конфигурации: Корпус ЦПУ ОЗУ E2E-E Если вы играете в Enigmatica 2: Expert - Extended, в модпаке есть предопределенный рецепт EEPROM. Найдите его в JEI и создайте. У него будет цветное свечение. Если вы его создали, можете пропустить следующий шаг Запись программы на EEPROM. Запись программы на EEPROM Скачайте файл из интернета (требуется ), запустите из командной строки: wget https://raw.githubusercontent.com/Krutoy242/lostuser/main/lostuser.min.lua Чтобы записать на существующий EEPROM, запустите: flash -q lostuser.min.lua LostUser Вставка в робота Возьмите EEPROM из корпуса компьютера и вставьте его в робота. Использование Программируйте робота, переименовывая его. Переименуйте робота на или с помощью . Назовите вашего робота robot.use(3), поставьте его на землю, включите и смотрите, как он кликает блоки перед собой. Синтаксис Кратко Если вы не хотите изучать Lua и вам нужно, чтобы робот кликал правой/левой кнопкой мыши, вот несколько простых имен для робота и результат: robot.use(3) - Робот будет кликать правой кнопкой мыши по блоку перед собой. robot.swing(3) - Робот будет махать мечом или ломать блок перед собой. Операторы и выражения Выполнение Робот будет выполнять свое имя как код Lua в цикле while true. Код может быть выполнен в любом варианте - оператор или выражение, но все равно должен следовать правилам потока кода Lua. Возврат Если выражение возвращает одну или несколько функций, они будут выполнены рекурсивно. Обратите внимание, что все возвращаемые значения рассчитываются сначала, и только потом будут вызваны функции. Глобальные переменные Все компоненты доступны как глобальные переменные. Компоненты сортируются естественным образом и добавляются в глобальные переменные по первой большой букве. C => computer E => eeprom I => inventory_controller R => robot T => trading ... Дополнительные глобальные переменные: i - текущий индекс цикла, начиная с 0. sleep(seconds: number = 1) write(...) - ошибка с сериализованным выводом. api(shortName: string, obj?: table) - написать полное имя сокращения. Сокращение Поскольку имя робота или дрона может содержать только 64 символа, указатели должны быть сокращены. Таким образом, вместо написания полного имени указателя, вы можете его сократить. Например, вместо написания robot.use(3), вы можете написать r.u(3) или даже Ru3. Правила сокращения: Если ключ имеет точное не-nil совпадение, оно будет возвращено. Сокращение должно содержать первую букву, а затем, по желанию, любое количество оставшихся букв. Если несколько имен имеют одинаковую первую букву, будет выбрано самое короткое, алфавитно отсортированное имя. Большая первая буква с точкой . может использоваться без точки. Число в конце сокращения будет вызывать сокращение как функцию с этим числом в качестве первого аргумента. В то же время, если это таблица, а не функция, все ключи таблицы будут естественно отсортированы и возвращен N-й элемент. Смотрите больше в Числовом Словаре. Локальные переменные не могут быть сокращены. Lodash _ Специальная вспомогательная функция нижнего подчеркивания _. Индексация _ Использование _ с числами _123 Вернет новый список-массив с длиной числа. Если первая цифра 0, таблица будет с нулевым индексом. Использование _ со словами _abc Создает функцию, которая будет записывать результат в переменную abc. Функция возвращает переданное значение. Обратите внимание, что _abc функциональна. Вызов _ Использование _ на строке Загрузит код внутри этой строки и вернет его как функцию. Вызов этой функции всегда безопасен для ошибок — если внутри произойдет исключение, функция просто вернет nil. Использование _ на таблице или функции Преобразует их в специальную таблицу _{} или функцию _'' для использования с Функциональным Программированием. Функциональное Программирование Любая таблица или функция, которую вы можете получить из глобальной переменной, будет преобразована в специальную таблицу _{}. Эта таблица улучшена дополнительными метаметодами операторов, которые помогают с функциональным стилем программирования. Любая итерация или вызовы pairs() на этих преобразованных таблицах будут выводить элементы в естественно отсортированном порядке. Операторы ведут себя по-разному в зависимости от левой и правой стороны оператора. Обратите внимание, что когда обнаруживается строка, она загружается и преобразуется в функцию по принципу _'fnc'. Приоритет Приоритет операторов в Lua следует таблице ниже, от высшего к низшему приоритету: ^ унарные not # - ~ * / // % + - .. << >> & ~ | < > <= >= ~= == and or Map ^, +, или & ^, +, и & операторы делают то же самое. Их три, только для управления приоритетом. Примечание¹: ^ ассоциируется справа. Это означает, что сначала будет вычислена правая сторона. Примечание²: Вы также можете вызывать невызываемые таблицы. t(x) то же самое, что t^x. Невызываемые таблицы — это таблицы без метатаблицы __call. Пример (map t^f): _{1,2,3}'0' -- _{0,0,0} Левая сторона Правая сторона Результат Таблица Функция Классическая карта _{4,5,6}^f -- {f(4),f(5),f(6)} Таблица Выбор индексов _{4,5,6}^{3,1} -- {6,4} Число, Булево значение Добавление значения в КОНЕЦ таблицы _{1,[3]=3,a=6,[4]=4}^5 -- _{1,3=3,4=4,5=5,a=6} Функция Функция Композиция f^g -- (...)=>f(g(...)) Таблица Распаковка как аргументы f^{1,2,3} -- f(1,2,3) Число, Булево значение Простой вызов f^1 -- f(1) Число, Булево значение Таблица Получение по числовому или булевому индексу 2^_{4,5,6} -- 5 Функция Не реализовано Лямбда - / | Левая сторона Правая сторона Результат Таблица Функция Фильтр, оставляет только значения, являющиеся Истинными _{4,5,6,7}/'v%2' -- {5,7} Таблица Не реализовано Число, Булево значение Удаление индекса _3/2 -- {1=1,3=3} Функция Функция Обратная композиция f/g -- (...)=>g(f(...)) Таблица Простой вызов f/R -- f(R) Число, Булево значение Композиция f/1 -- (...)=>f(1,...) Число, Булево значение Таблица Получение по модулю i/t -- t[i % #t + 1] Функция Вращающаяся композиция 2/f -- (...)=>f(..., 2) Цикл ~ или * Левая сторона Правая сторона Результат Таблица Функция Не реализовано Таблица Не реализовано Число, Булево значение Не реализовано Функция Функция Пока истинно, делай f~g -- пока истинно(g(j++)) делай f(j) Таблица Не реализовано Число, Булево значение Цикл for f~n -- for j=1,TONUMBER(n) do f(j) end Число, Булево значение Таблица Не реализовано Функция То же, что и f~n, но без передачи индекса n~f -- for j=1,TONUMBER(n) do f() end Унарные операторы Унарный оператор Объект Результат ~ Функция Пока истинно, делай ~f -- повторять пока не истинно(f()) Таблица Сглаживание таблицы, используя числовые индексы. ~_{1,{2,3},{4,a=5,b={6,c=7}}} -- {1,2,3,4,5,{6,c=7}} - Функция Создать функцию, результат которой будет инвертирован. Если результат истинный, возвращает 0. Возвращает 1 в противном случае. -- id здесь функция, возвращающая свой первый аргумент (-id)(0) -- 1 (-id)(4) -- 0 (- -id)(4) -- 1 Таблица Обмен ключей и значений -_{'a','b','c'} -- {a=1,b=2,c=3} # Функция Создать функцию, которая будет оборачивать свой результат в таблицу. Полезно для функций, возвращающих несколько значений. -- Предположим, `f(n)` возвращает три значения - 2,3,n f&4 -- 2 #f&4 -- _{2,3,4} Истинные значения Знач ение считается "истинным", если оно не является "ложным". "Ложные" значения: false или nil '' (пустая строка) 0 (ноль) nan (не число, n ~= n) inf или -inf (результат 1/0 или -1/0) Макросы В программе есть несколько предопределенных макросов - символов, которые будут заменены везде на другой текст. ! => '()' ⓐ => ' и ' ⓞ => ' или ' ⓝ => ' не ' ⓡ => ' вернуть ' ⒯ => '(истина)' ⒡ => '(ложь)' Примеры Перемещение между двумя точками и выполнение их метки Имя дрона: P=i/Nf300ⓡDm^Pp,s/1~'Dg0>1',_(Pl) Nf300: Выполнить navigation.findWaypoints(300). i/Nf300: i - индекс выполнения скрипта. i / table - "Получение по индексу модуля" t[i % #t + 1]. P=i/Nf300: Записать в глобальную переменную P различные точки каждый цикл скрипта. ⓡ: будет заменено на вернуть Dm^Pp: вызов drone.move(table.unpack(P.position)). s/1~'Dg0>1' => пока drone.getOffset() > 1 делать sleep(1). _(Pl): Загрузить P.label как код Lua. Эта загруженная функция будет возвращена и выполнена. Метки точек. Первая просто всасывает снизу, вторая итерирует по 4 слотам и сбрасывает вниз. _'Dsk0'~4 Dsel-'Dd0'~4 Зигзаг + Использование вниз, полезно для ферм Имя робота: m,t=_'Rm3,Ru0',Rtn/(i2>1)ⓡ~m,t!,_'m!,t!'!ⓞt/m m,t=_'Rm3,Ru0',Rtn/(i2>1): определить две функции для движения и поворота _'Rm3,Ru0': определить функцию Rm3,Ru0, которая будет двигаться вперед и использовать инструмент вниз Rtn/(i2>1): это создает функцию, которая будет вызывать Rtn (robot.turn) с аргументом i2>1. i2 - сокращение для i%2+1 ~m: Заставляет робота двигаться вперед, пока он не сможет двигаться. t!: просто поворачивает _'m!,t!'!ⓞt/m: Двигаться и поворачиваться. Если движение не удалось, повернуться и двигаться снова. Торговый бот Имя робота: Rsel-'Rd0'~RiS0,IsF/0~Igz0,Tg0'~tr' Rsel-'Rd0'~RiS0: Выбрать каждый слот и сбросить вниз IsF/0~Igz0: Для каждого слота инвентаря снизу inventory_controller.getInventorySize(0) вызвать inventory_controller.suckFromSlot(0, k) Tg0'~tr': Торговать всеми товарами. Есть другой вариант имени робота, более продвинутый. Он будет забирать только предметы, которые действительно требуются для торговли. Эта программа жестко запрограммирована для работы с внутренним и внешним инвентарем размером 16: -- Торговать всем a=-~Tg0"_{g!}'n',~tr"ⓡ_16&R16-'Rd0'&IgI/0&'a[n]ⓐI8/0&k' -- Не продавать изумруды [id==388] a=-~Tg0'388^-g0ⓞ{g0.n,~tr}'ⓡ_16&R16-'Rd0'&IgI/0&'a[n]ⓐI8/0&k' Создатель рун Поместите ингредиенты в первые 6 слотов робота. Живой камень на 7-м, палочку на 8-м. Имя робота: _8/'Rsel^v,v==7ⓐ{s3,Rm1,Rd(3,1),Rm0}ⓞ{Ie!,Ru3,Ie!}' Rsel^v: Выбрать слот по очереди v==7ⓐ{s3,Rm1,Rd(3,1),Rm0}: если это 7-й слот с Живым камнем, подождать 3 секунды до завершения крафта, затем сбросить Камень сверху. Ie!,Ru3,Ie!: Для других слотов - просто кликнуть правой кнопкой мыши с предметом Ферма одиночных деревьев Этот робот предназначен для использования с саженцами Forestry, которые обычно не могут быть поставлены как блоки, но требуют клика правой кнопкой мыши для посадки. Кроме того, роботу нужен неразрушимый Широкий Топор из TCon с чертой Глобальный Путешественник. Кроме того, мой топор имеет черту Удобрение - клик правой кнопкой мыши для удобрения. Поставьте робота на контейнер с саженцами. Имя робота: #(1|#Rdt&3)<6ⓐRsw/3-s/1-Rsk/0-Ie-Ru/3-IeⓞRu3,s (1|#Rdt&3): Обнаружить блок перед собой, выбрать второе возвращаемое значение - описание блока #()<6: хитрость, чтобы определить, является ли блок твердым Rsw/3-s/1: Срубить все дерево, подождать 1 секунду Rsk/0-Ie-Ru/3-Ie: Всосать саженец снизу, затем посадить его. Обратите внимание, что Rsk получает одно значение от sleep возврата Ru3,s: Удобрить саженец Другие примеры Круговой шахтер. Используя Молот с частью из Алумита (черта Глобальный Путешественник). Поставьте Робота под землю, поместите стак Блоков Угля в выбранный слот робота. Робот начнет кружить вокруг, добывая все на своем пути. Gi,_'Rm3,Rsw3'~i*2,Rtn⒯ Робот для сортировки дропа мобов. Берет снизу, предметы, подлежащие повреждению, вверх, остальные - вперед. Rd|3%2^(IsF(0,i%Igz0+1)ⓐIgSII!.mDⓞ2) Открыватель кошек. Берет 16 предметов перед собой, кликает их правой кнопкой мыши, затем сбрасывает инвентарь вверх. Rsk/3&16ⓐIe!,~_'Ru0',_16/Rc|Rsel/'Rd1' Компрессионный бот. Берет спереди, крафтит 3x3, затем сбрасывает назад. -(_16-Rc&12)|'Rd3'&Rsel,IsF/3/'_11/8/4&Rc!/9/RtT'|i81,Cc Бот для неразложимых предметов. Берет предмет перед собой только если они неразложимы и кладет их наверх. Если не может сбросить предмет наверх, толкает вверх и ставит блок. (IgSI/3&_a^i1728ⓞ{}).mS^_{_'IsF/3&a,Rd1ⓞ{Pps1,Rsel9,Rp1,Rsel1}'} Дополнительно Ссылки Репозиторий с исходным кодом и readme Модпак, для которого был запрограммирован этот робот: Enigmatica 2: Expert - Extended Старое описание: LiMWFlH.mp4
  2. 1 балл
    Печальные баги - это, видимо, GUI.menu(1, 1, ...) вместо GUI.menu(1, 2, ...)? Ты же сам расположил менюху на Y = 1, где уже чиллит титловая строка. Разумеется, менюха ее перекрыла На всякий случай уточню, что гуйка работает с заранее известными координатами и размерами всех объектов, ничего не рассчитывая автоматически без ведома кодера - это не WPF/UWP с адаптивной версткой, т.к. ресурсы компов люто лимитированы. Исключения, конечно, есть в виде всяких GUI.layout или GUI.table, но это капля в море. Поэтому любая смена позиции или ресайз виджетов требует ручной обработки А, и еще кое-что: GUI.titledWindow / tabbedWindow и иже с ними - просто шаблоны, которые создаются буквально в 10 строчек кода на основе базового объекта окна GUI.window, но с учётом твоих личных нужд. В них попросту заранее выставлены нужные координаты и подогнаны размеры, ничего более
  3. 1 балл
    Под мышами я имел в виду нужду в хаотичном скроллинге документации :p Было бы клево иметь всю инфу в маркдауновой доке без нужды бегать к комментам в сырцах и обратно, я об этом Занятно, а что будет означать конструкция ?{a==nil}? Такая запись вообще валидна или же <> требуется в обязательном порядке? В доке сказано: "You can use <> inside lua code to execute program between <> as commands", из чего я сделал вывод, что <> выполняет некую программу. Но <a> выглядит как переменная, а не программа. Что такое program? Это просто собирательный термин или там действительно какие-то программы поддерживаются? Поясни, пожалуйста Наверное, это было бы правильно, но вкусовщина такая вкусовщина. Имхо, главное, чтобы тебе было удобно и понятно, а невежественный плебс в любом случае подстроится)0 Выглядит шикарно, особенно если бы это визуализировалось в некой скролл-зоне экрана, в то время сам скрипт писался бы в инпут-панели. Но так и до визуального кодинга недалеко, а это тревожный звоночек шизофрении!
  4. 1 балл
    Респект за соулс от мира опенкомпов! Вики очень достойная, но логику работы сложно осилить даже на примере \0ZZ, учитывая необходимость перма-скроллинга то по списку алиасов в сырце, то по списку операторов в самой вики. Да и без поиска тут не обойтись. Пожалей наши мыши! Интереса ради я решил вникнуть в первый пример: 1) Читаю команду \0, понимаю, что это useDown(), вопросов нет 2) Читаю команду Z, осознаю, что это алиас на %`~F'ta'N` ?M*'F?M`FN``RRMN`', приступаю к расшифровке 3) Читаю команду %, смекаю, это ещё один алиас на ?{<a>==nil}, отвечающий за проверку истинности результата выполнения некоего Lua-выражения. А какого? 4) Судорожно ищу, что такое <a>, и вроде бы даже нахожу нужную секцию: То есть, согласно вики, a - это программа, которая... что? Которая названа a? 5) Пытаюсь найти в сырцах некую программу с названием а, но тщетно 6) Допускаю, что, скорее всего, a - это переменная, которая пока еще не определена в текущем окружении. Вроде бы. То есть, наверное, выражение ?{<a>==nil} эквивалентно if a == nil. Или a - это все же программа? Ладно, хрен с ним 7) Возвращаюсь к пункту 2, читаю символ `, вновь обращаюсь к сырцам. В сырцах не нахожу. Видимо, оно в вики? Скроллю вики, нахожу искомое: Так, падаж-ж-жи! Интересно, зачем столько вариантов... для возможности использовать внутри строк другие кавычки, когда требуется? Если да, то это хорошо, хотя классический эскейпинг через \" был бы правильнее, т.к., например, я не смогу заюзать все 3 варианта кавычек в строке "hello `sunny`, you are 'so shiny' and "beautiful"". Или все же смогу? Энивей иду вперед 8) Натыкаюсь на символ ~, определяющий алиас на подпрограмму ~F'ta'. Судя по вики, у нас теперь определена некая подпрограмма F, выполняющая команды ta 9) Ищу, что такое t и a. Сырцы говорят, что t отвечает за robot.turn(clockwise). Вероятно, переменная а и отвечает за поворот по часовой стрелке? Вроде бы понятно... 10) Читаю новый неизвестный символ N. Хоспади, только не алиас... МАМОЧКИ, ЭТО ОН. Ищу в сырцах содержимое, нахожу логику инверсии перменной a -a{not <a>}... не-е-е, все, убейте меня. Софтина хорошая, идея клёвая, но нервная система у меня одна хд
  5. 1 балл
    Этот параметр сообщает экранному буферу, что нужно отобразить не только изменившиеся с последней отрисовки пиксели, а вообще все сразу. Обычно эта необходимость возникает при запуске скриптов, работающих с GPU напрямую в обход концепции экранного буфера. То есть в случае майноси практически никогда. Разве что для каких-нибудь старых игр или скринсейверов фича может быть востребованной... В доке по workspace он указан, хотя и без пояснений. Могу добавить инфу на всякий, если нужно:
  6. 0 баллов
    биос имеющий возможность клонировать, переименовывать и форматировать диски, а так же устонавливать с диска на диск(отличия устоновки от клонирования что при устоновке диск не форматируеться в так же пропускаються файлы начинаюшиеся с .) из фичь: internet boot зашита(биос невозможно отредактировать или прочитать из системмы хотя он не readonly) fastboot lua disk menager удален метод setArchitecture для большей безопастности загрузка в mineOS сенсорное управления работа без gpu и screen и keyboard(если не возможности произвести ввод(нет клавиатуры или экрана или он первого уровня) то если не будет выставленого загрузочьного диска он выбериться автоматически) устоновка: выберите архитектуру Lua 5.3 введите команду "pastebin get e98eL0DX /tmp/bios.bin; flash /tmp/bios.bin -q; reboot" премичания: я это в mineOS app market не выкладывал какой то "человек" сделал это без указания авторства, чел пожалуйста либо укажи автора тоесть меня либо удали устоновшик из app market
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...