Лидеры
Популярный контент
Показан контент с высокой репутацией 15.03.2022 во всех областях
-
1 балл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
-
1 баллКак работать с ней? Опции, настройки, документация? Скрины, принципы работы, настройка? Ничего не понятно ...
-
1 баллОперационная система LunaOS (Самописное ядро) Всем доброго времени суток. Однажды я решил узнать, как же создать операционную систему в OpenComputers, однако создавать вторую OpenOS я не хотел. Потому пытался придумать "изюминку" своей ОС. Тут пришла мысль о том, чего очень не хватает в ядре OpenOS - многопоточность. Я уже читал на форумах, что данная особенность "не нужна", "нет смысла" и т. п. Однако данная возможность добавит несколько особенностей в OpenComputers: SSH клиент. Подключение к компьютеру; Удаленный рабочий стол; Система пользователей; Сервера; Кластер. Само собой это не полный список возможных программ, которые можно написать в многопоточной системе. Однако это уже большой аргумент, для ее создания. Начал я с реализации многопоточности. Я надеялся, что в Lua есть удобные потоки, через которые данный процесс не вызовет проблем, однако такой возможности не оказалось. Я уже думал забросить создание многопоточности и просто создать операционную систему, а вскоре и совсем забросить создание операционки. Спустя неделю, я все же придумал как реализовать многопоточность и все благодарю моему другу, который не дал мне "опустить руки". Идея пришла не сразу и как и все идеи - в дУше (на самом деле в уборной). На помощь мне пришли coroutine. Среди читающих наверняка есть 3 типа: те кто понял, как все это работает; те кто знает, что такое coroutine, но не знает как на их основе создать псведо-многопоточность; те кто в танке. Настоящая операционная система является многопоточной, хотя процессор - однопоточный. Но как? На самом деле, все достаточно просто. Операционная система переключается с одного процесса на другое через определенные промежутки. Это зоны являются атомарными (неделимыми). Так же я решил поступить и с OpenComputers. Многие думают, что это невозможно, но тут к нам приходят на помощь coroutine'ы. Через некоторое время мне удалось проработать ядро операционной системы. Вот структура операционной системы: Вот диаграмма жизни операционной системы: На данный момент ядро уже почти готово. Уже скоро я начну работать над самой операционной системой. Как только мне будет что показать (помимо исходного кода) я выложу это в этой теме. На данной момент у меня есть к вам несколько вопросов и предложений: [Вопрос] Будет ли иметь смысл данная операционная система? [Вопрос] Какие еще возможности вы хотите предложить? [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это. Так же я уже придумал реализацию и буду писать следующие программы: apt-get ssh client and server ftp client and server teamviewer cluster software raid sudo Спасибо за внимание и ждите обновлений! Обновления: Обновление 25.08.2016 (не известно) ==================== Теперь в этой области будут появляться все обновления системы. Обновление 26.08.2016 (22:40) ==================== Реализованы модули control, hardware и signals в ядре. В процессе - исправление ошибок и недочетов. Разработка модуля filesystem. Обновление 27.08.2016 (1:50) ==================== Написана текстовая документация на 50% После завершения и доработок - будет выложен для совместной доработки. P.S. В нем будет виден принцип работы ядра, но я думаю это не столь так важно, ибо отыскать к нему доступ смогут лишь только опытные пользователи OpenComputers. Обновление 29.08.2016 (12:10) ==================== Ядро реализовано. Написание API. Решение проблем с удобством написания программ при работе по SSH.
-
1 баллДобавлена поддержка нескольких загрузочных файлов (если на одном физическом диске, например, майнось и опенось)
-
1 баллРешил на досуге написать программу, которая пишет кто рядом находится, ибо одолели админы на одном сервере со своим ванишем. Работает она через чат бокс с помощью команд "-палево" и "-Гады" выключается командой "-выкл" или "-off". Так же тут встроен вайт лист, который убирает вас из списка скана оставляя только недругов в этом списке. Ссылка: Прога с палевом по комманде: pastebin get ch06Qrb8 Прога с палевом в цикле: pastebin get zENcZjth Комплектация: Любой пк с подцепленным радаром и чатбоксом Функционал: Палит все что видно и не видно в радиусе радара. Настройки: Изменить ники в вайт листе и еще обязательно в конце скрипта (иначе прога будет вас посылать). Так же можно поменять фразы и названия, думаю в коде сами найдете. Недостатки: Куча моего быдлокода особенно в конце, не весь задуманный функционал смог реализовать. PS: Отдельное спасибо Alex и Savex за то что объяснили пару моментов с кодом.
-
1 баллКак всем известно из моей прошлой статьи, недолюбливаю я админов на одном сервере. По этому я решил немного по пакостить с помощью моей новой программки... Представляю вашему вниманию программу пишущую в чат от имени другого игрока (Большой выбор настроек в комплекте): pastebin get F1rwkyqd Для работы необходимо: Планшет/пк Установленный чат-бокс Ник админа от имени которого будем пакостить Запускаем программу пишем префикс, ник, текст(так же выбираем цвета для этого всего) и вот в чате видим наше сообщение Для выхода из программы введите сообщение "Джеронимо"
-
1 балл
-
0 балловКруто, знаешь о systemd, но при этом не в курсе об screen и tmux... Хочу попросить @Wolframoviy не выкладывать в открытый доступ то что находится на сервере, очень плохая идея.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
