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

Лидеры


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

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

  1. 8 баллов
  2. 3 балла
    Просто сейчас лето, пора отпусков и пр. Не до майнкрафта пока) Просто сейчас осень, учёба началась и пр. Не до майнкрафта пока) Просто сейчас зима, праздники и пр. Не до майнкрафта пока) Просто сейчас весна, экзамены и пр. Не до майнкрафта пока)
  3. 3 балла
    Веб-версия программы для обучения сети: https://krutoy242.github.io/ Будет тормозить, так как я еще не настроил рендер при экспорте на веб страницу. Небольшое описание как пользоваться: Вы можете: Наслаждаться анимационными понтами на 3 FPS Смотреть как связи между нейронами становятся толще. Например, связь между "копнул вверх" (swing up) и желанием двигаться вверх. Пробовать изменять скорость обучения (learning rate) и смотреть как сеть обучается слишком медленно или встает в тупик. Изменять количество нейронов (Hidden 1 and 2) сети и не понимать вместе со мной почему эффективность от этого почти не меняется. В течении недели я добавлю возможность редактировать входные значения прямо на странице, и тогда вы сможете сами пробовать новые способы обучения.
  4. 2 балла
  5. 2 балла
    @BrightYC Нашел странный баг на 1.7.10, надо проверить фикс. Добавлен подсчет предметов после упаковки, теперь робот выгружает ресы не только при износе инструмента и подзарядке. Удивительно, но я пропустил самое главное.
  6. 2 балла
    Элементарно, причем в две строчки:
  7. 2 балла
    Кек. Не нужно делать то, что уже написано=D timestamp = 0 while true do print(os.date("%H:%M:%S", timestamp) --timestamp - любое число в секундах timestamp = timestamp + 1 end >> 00:00:00 timestamp = timestamp + 1 >> 00:00:01 --И так далее...
  8. 2 балла
    @BrightYC посмотри как работает код: на старте, робот ломая твёрдый блок получает скорость износа инструмента периодически происходит проверка износа инструмента и производится расчёт сможет ли он прокопать область если заряда не достаточно то отправляется на стартовую точку для обслуживания на старте происходит сортировка, поиск сундука, выгрузка, крафт лута в блокои , заправка углём, поиск в сундуке такого же инструмента с износом(или зарядом) более 30 процентов, если в сундуке нет подходящего, то ищем рядом зарядник и пытаемся зарядить инструмент, если зарядился продолжаем копать, если нет то ждём новый инструмент
  9. 2 балла
    Еще одно обновление: Добавлена возможность загрузки модулей с планшета, то есть теперь можно расширять код хоть до полу мегабайта. Для начала была добавлена сериализация, чтобы таблицы нормально отображались при отправке на планшет: Теперь можно не ограничиваться фантазией и писать сколько угодно(в пределах, разумеется, ограничивается лишь размером оперативной памяти у дрона и планшета)
  10. 2 балла
    В общем я много думал, и это не вариант. Если превратить выходные нейроны во внутренний слои и с них снимать значения, то последний один нейрон а.к.а "полезность" просто настроится всегда показывать 0. Для нейросети это беспроигрышный вариант - робот забился в угол, нейросеть определяет что польза будет 0, и ты ей обратным распространением ошибки подкрепляешь и передаешь 0. В общем, не выйдет так делать. Последние 3 дня работаю над экспортом эмулирующей программы в браузер, но и развлекаюсь добавляя анимации
  11. 2 балла
    С небольшим запозданием, но я таки обновил сервер снова, и исправил все баги. Итак, теперь сервер постоянно обменивается с клиентами пингами. Это позволяет поддерживать соединение "в тонусе" и не давать ему отвалиться, как на 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
  12. 2 балла
    Небольшое обновление(Абсолютный контроль над дроном): Доделал интерпретатор, теперь почти неотличим от оригинала. Теперь не нужно писать return чтобы вернуть значение, а так же появилось две функции - sleep() и print(). 1 помогает прекратить код через CTRL+D при исполнении, 2 поможет вернуть значение в работающем коде: Так же добавил утилиту net(*клик*) для того, чтобы загрузить программу на дрона. То есть, можно запустить любую программу командой net <program_name> И она сию минуту загрузится на дрон: Установка: pastebin get gF4URgfn net.lua P.S Так же ещё много мелких правок, но это не суть важно. Так же упёрся в лимит по памяти, но я думаю это уже неважно =d P.P.S В интерпретаторе есть функция 'clear' - если её написать, терминал очистится(как неожиданно, правда?)
  13. 1 балл
    Если больше никакие значения таблицы не требуются, то можно так: grow = geolyzer.alanyze(sides.front).metadata
  14. 1 балл
    Пусть роботы сами начнут играть в майнкрафт, без контроля человека, как у Крутого.=d Пусть сами познают майн, а какой-нибудь один из роботов сделает такой же форум, где роботы будут ныть, что строить или копать больше нечего
  15. 1 балл
    Да, без аддонов будет очень сложно или даже невозможно. Но если потренироваться быть хакером, то многие стены превращаются в двери. В зависимости от настроенной дальности сенсора OpenPeripheral строим сеть сенсоров, расставленных чаще или реже. Рано или поздно в зоне покрытия заспавнятся нужные мобы. Подвести к мобу робота и ударить того каким-то предметом не проблема. Чтобы не строить сетку сенсоров объёмной, ровняем площадку для спавна мобов, полностью заполняя блоками пространство под площадкой, и полностью освобождая от блоков пространство над ней. Это задачу, наверное, можно и ванильными датчиками движения решить. Заспавнившиеся мобы обычно как-то двигаются, хотя и вяло, если не видят игрока. Робот умеет бросать око Края. А всё тот же сенсор OpenPeripheral умеет находить координаты любых предметов, и летящего к порталу ока тоже. Да, сенсор работает только стационарно при подсоединении к компьютеру, но робот способен передвинуть эту установку в любое положение и включить её. Средствами ванильного OC найти портал сложнее, но тоже можно. 1) Роботы-копальщики могут натолкнуться на неломаемые блоки, которые с большой вероятностью окажутся блоками портала Края. 2) Геосканер может обнаружить блоки с плотностью бедрока, но расположенные специцическим образом. 3) При непосредственном контакте геосканер точно определяет тип блока. 4) Око края с вероятностью 80% выпадает в ограниченной от броска области. Если заранее подготовить площадку достаточного размера, и после броска из центра роботом прососать всю площадку, то вместе с найденным глазом будет найдено и направление к порталу. Триангуляция поможет сэкономить время и ресурсы при поиске портала. Активировать портал тоже можно роботами. @BrightYC Ты у нас вроде любишь играться с дронами. Если не трудно, проверь, можно ли дроном пройти через портал в другое измерение. Робот, насколько я помню, пройти не может. Но мобы через порталы проходят. А как поведёт себя дрон? Если пройдёт дрон, то он пронесёт и робота. А дракона роботы могут даже из ванильных луков убить. Конечно, робот управляет стрельбой неполноценно в сравнении с игроком, но при желании можно просчитать все доступные роботу траектории полёта стрел. Даже если нет нормальных радаров, быстро и точно определяющих положение дракона, того можно просто заспамить вслепую стреляющими роботами. Пусть, они сами будут массово гибнуть, но Край они разберут на атомы, рано или поздно.
  16. 1 балл
    @ArtHacker ну, там короче при загрузке защищается список таблиц, куда входит и os , однако либа filesystem не полностью загружается при загрузке из-за package.delay, например файлик boot/02_os.lua содержит в самом конце строчку require("package").delay(os, "/lib/core/full_filesystem.lua") а файл boot/90_filesystem.lua эту require("package").delay(fs, "/lib/core/full_filesystem.lua") ну, а теперь как именно работает эта функция, после её использования устанавливается временная метатаблица, которая после первого обращения к любому индексу этой таблицы самоудаляется и запускает файл, который указан вторым аргументом. Проблема возникает из-за того, что таблица os защищается (т.е. скрипт, который запустит full_filesystem стирается до своего запуска), а filesystem нет. Фиксить эту проблему можно перед защитой искусственно обратиться к какому-то рандомному индексу проблемных таблиц, хотя, очевидно, что такой метод это дикий костыль, хоть и простой в реализации.
  17. 1 балл
    a = 'vasia,' print('hello '..a..' world')
  18. 1 балл
    Мало чего обновил почти за год. Память без значений выводится, 1024 чего? бита? байта? кб? мб? гб? энергию можно сжать (энергия: 1500 из 2000 (65%)) так же и с памятью работу устройства выводить в формате дн:чч:мм:сс так как вывод в секундах ни о чем не говорит после 120 секунд (тупо дальше лень считать) активные компоненты можно показать зачем адрес робота то? нигде не юзается. объем инвентаря можно рассчитать (активно 64 слота, доступно 10 (20%)) Можно было бы и получше сделать, если не лезет так прокрутку делай, на 2-3 страницы.
  19. 1 балл
    И всё таки за 6 месяцев и 9 дней я смог сделать скриншот заодно обновив до версии 2.1 (были баги с роботом)
  20. 1 балл
    Ну что я могу сказать спасибо большое
  21. 1 балл
    Упс. Файлик install пытается установить немного другое. Сделай тоже самое с другим файликом. Допустим: edit mineos.lua
  22. 1 балл
    require("component").eeprom.set([[ local handle, data, chunk = component.proxy(component.list("internet")()).request("https://raw.githubusercontent.com/IgorTimofeev/MineOS/master/Installer/Main.lua"), "" while true do chunk = handle.read(math.huge) if chunk then data = data .. chunk else break end end handle.close() load(data)() ]]) require("computer").shutdown(true) это установщик MineOS. открой файл командой edit install.lua вставь туда код, что я тебе скинул. Нажми CTRL+S и CTRL+W. Запусти файл написав install.lua Должно установить, по идее.
  23. 1 балл
    Ну, devfs в OpenOS уже давно есть. А это то же самое по своей сути. Если сделать таблицу, в которой заимплементить все функции прокси filesystem, её можно будет примонтировать и использовать.
  24. 1 балл
    По идее достаточно одной команды ln для ссылки на всю директорию /proc. Но зачем? Если я верно понял вопрос, цель заключается не в получении доступа к параметрам хостовой системы на Linux, а в том, чтобы сделать OpenOS ещё более похожей на Linux. Не понятно лишь, с какой целью. Дополнительная функциональность точно поднимет требования к оперативной памяти, но насколько оправданы эти траты?
  25. 1 балл
    Я конечно с линуксом на вы, но вроде там есть команда ln которая позволяет создать типа ссылку на оригинальный файл. Если циклом прогнать по всем папкам эту команду то думаю вы получите то что хотите. P.S. помидорами не кидать я реально с линуксом мало знаком.
  26. 1 балл
    Если ты пишешь свою ОС - ты пишешь и свой API к файловым системам. Ничего не мешает тебе сделать сколько угодно и каких угодно виртуальных ФС, или папок, или файлов. Для примера - тут где-то валялась программа, которая позволяла объединять жесткие диски в один, с тем чтобы обойти лимит на максимальный размер диска, и иметь возможность работать с файлами по 4+ мегабайт. Она как раз создает виртуальную ФС над стандартной. В реальности файл разбит на множество частей - а программы которые с ним работают этого не замечают. Так же этого файла в принципе может не существовать, и он может генериться системой на лету - и программы тоже не заметят. Короче не вижу препятствий.
  27. 1 балл
    Во первых, какой радар? Из computronics'a? Если так, то просто: local component = require("component") local redstone = component.redstone local radar = component.radar local whiteList = {"BrightYC"} --Вайтлист, он не будет проверять этих игроков. Второй и последующие игроки пишутся через запятую. Первый - нет. local sideOutput = 0 --Подробнее https://minecraft-ru.gamepedia.com/OpenComputers/Sides_API redstone.setOutput(sideOutput, 0) local function scanPlayers() local players = radar.getPlayers() for i = 1, #players do for j = 1, #whiteList do if players[i].name ~= whiteList[j] then return false else return true end end return false end end while true do if not scanPlayers() then --Если были найдены игроки redstone.setOutput(sideOutput, 15) --Подаём сигнал os.sleep(3) --Ждём 3 секунды redstone.setOutput(sideOutput, 0) --Убираем сигнал end os.sleep(.15)--Ожидаем 0.15 секунд для следующего сканирования end
  28. 1 балл
    Так же, после фикса пытался запустить, робот 2 раза написал "непреодолимое препятствие", оказалось что он чуть выше взлетел точки старта. Вот лог: Не могу понять, он ресурсы выгружает не на точке старта что-ли? Эндер-сундука нет.
  29. 1 балл
    Самое простое, что могу предложить это на каждый улей повесить по компьютеру с транспозером и анализатором. Будет очень избыточно, но можно бесконечно расширять и распараллеливать процесс селекции. Можно анализировать руками, складывать в общее хранилище, откуда они будут забираться для селекции. А вообще, это все довольно быстро делается руками - размножаются нужные породы, пачками скрещиваются, сортируются и размножаются заново.
  30. 1 балл
    По логу вижу, что робот пытается вернуться на базу, но постоянно останавливается для подзарядки. Уже исправил.
  31. 1 балл
    (проект в разработке) Цель данного проекта - создание нейросети и условий для ее самообучения. В идеале, это будет бомжовый робот минимальной комплектации (возможно даже без жесткого диска), который в зависимости от окружающих условий будет определять свою полезность. Также, он будет "программироваться" снаружи с помощью окружения оставленного другими роботами, формирующими "улей". Апогеем будет саморепликация. Кроме достижения цели, важен и процесс. Наблюдать за самообучением и выбором действий у нейросети очень интересно. Нейросеть изнутри: Мигающие точки - нейроны, линии - синапсы (связи), справа эмулятор мира майнкрафт на движке 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. Сейчас в их действиях слишком много шума. Я специально не даю им кирки, что бы они не унеслись в бесконечность. Фидбек Мне нужно помощь. Подскажите, что лучше подавать на вход, и как обучать сеть. Главная проблема, что для обучения я должен указать какие значения должны быть на выходах при текущих условиях, а я и сам не знаю. Обычно, робот теряется в пустом пространстве и я не знаю какое действие ему казать как "единственно правильное". А так, буду сюда отписываться и отчитываться о процессе разработки. Update 20.06.19, веб-версия эмулятора
  32. 1 балл
    Бывает необходимость показать время работы или ожидания программы, которое составляет по несколько часов и смотреть что прошло 100500 секунд крайне не удобно, куда привычнее наблюдать в формате часов. Перекопав интернет на LUA ни чего не нашел, только на C# так что адаптировав оставлю примеры здесь, может кому и пригодится. Добавил варианты предложенные @BrightYC Перевод секунд в формат часов Показать сколько прошло времени от включения в формате часов Отсчет времени в формате часов
  33. 1 балл
    Норм В print добавь закрывающую скобку. Эмулятор OCEmu показывает три часа, хотя только открыл, видимо кастыли, щас на роботе гляну Всё норм, спасибо за простую реализацию
  34. 1 балл
    1. Да. Но бур заряжать будет нечем и при разряде инструмента вернется на базу, искать зарядник и проверять сундук. 2. Да. При износе кирки робот едет на базу и ищет в контейнере другую такую же, но с меньшим показателем износа.
  35. 1 балл
    Всем привет. Представляю вам программу для почти полного управления дроном. Но сначала короткая предыстория: Из возможностей отмечу следующее: Перемещение по сторонам света без улучшения "Навигация"(Спасибо версии OC 1.7.3) Возвращение дрона к управляющему планшету(Компьютеру) Удалённый интерпретатор Привязка дрона к управляющему планшету(Почти полная невозможность угона) Красивый Динамичный интерфейс(Отображение заряда планшета, время, заряд дрона, уровень сигнала) Остальные функции можно найти в программе или в скриншотах. Установка: На планшет (Для обладателей интернет-карт): pastebin get 8eEpZtdi drc.lua Для дрона (Для обладателей интернет карт): pastebin get vt7biZzP drc-flash.lua && flash -q drc-flash.lua drc.lua После вынимаем биос и вставляем в дрона. Первый запуск: Первый запуск сопровождается привязкой дрона к порту(Порт можно увидеть открыв дрона) и адресу беспроводной карты. Из-за этого возможность угнать дрона стремится к нулю, так как для первичной настройки нужно стоять не дальше 3 блоков от дрона. Пишем: drc <порт дрона> После этого дрона невозможно угнать, если рядом никого не было и он не мог подслушать сообщение(Перезагрузка привязку не ломает) Пара скриншотов: Видео: P.S Процент справа от шкалы сигнала обозначает не силу сигнала, а мощность передатчиков на планшете с дроном(поэтому для корректной работы нужны одинаковые карты беспроводной сети) В общем на это всё, дань уважения дронам выполнена, теперь могу спать спокойно.
  36. 1 балл
    Хотелось бы возможности вставить произвольный файл с гиста ембедом. Я когда-то в блог вставлял уже так статью про звуковую карту, ибо что тогда, что сейчас форумный редактор неудобный (а теперь ещё и тормозит). У меня есть на гисте ещё несколько потенциальных статей, и их бы мне тоже таким же образом на форуме опубликовать хотелось.
  37. 1 балл
    Целую неделю вожусь с графикой. Это поможет сделать нейросеть более нагляднее. А еще, я собираюсь за эту неделю перевести программу тестирования на HTML5, в браузер, так что каждый сможет попробовать свои собственные формулы для обучения. В интерфейсе можно будет брать любые параметры на входе, рассчитывать их как угодно и выдавать результат нейросети. Посмотрим, вдруг кто то из вас найдет метод лучше чем я. P.S. Зачем удалили сообщения? Норм же общались...
  38. 1 балл
    Хочу поделится с вами своей библиотекой, которую использую практически в каждой программе с графическим интерфейсом. С ее помощью можно генерировать любые "окна" на свой вкус, работать с ними, а затем получать результат работы в обычном массиве. Cкачать библиотеку: pastebin get wtWVFpKZ lib/windows.lua Подробное описание основной функции и ее аргументов: Примеры работы с библиотекой:
  39. 1 балл
    Программа обновлена до версии 2.0! Скриншоты будут позже. Ссылка на 1.01 также в шапке
  40. 1 балл
    local fs = require("filesystem") local f = io.open("/tmp/time", "w") f:write("time") f:close() local timestamp = tonumber(string.sub(fs.lastModified("/tmp/time"), 1, 10)) + 3600 * 3 --Умножаем на часовой пояс, в моём случае GMT +3 local realtime = os.date("%d.%m.%Y %H:%M:%S", timestamp) --Реальное время в формате День.Месяц.Год Час:Минута:Секунда print(realtime) Зачем городить всякие сервера? Код выше позволяет получить время машины на котором играешь(Сервер или твой компьютер)
  41. 1 балл
    Добрый день, игроки. Давайте поговорим о энергетики OpenComputers, и почему улучшение ёмкости не нужно роботу. Вся дальнейшая информация взята из стандартных конфигов мода OpenComputers на версию майнкрафта 1.12.2 актуальной на текущий момент версии мода. Вот энергоёмкость робота: # The amount of energy robots can store in their internal buffer. robot=20000 Мало, не правда ли? А вот энергоёмкость улучшений "энергоёмкость" # The amount of energy a capacitor can store when installed as an # upgrade into a robot. batteryUpgrades=[ 10000, 15000, 20000 ] Видим, что третий уровень даст такой же прирост энергии как и базовая энергоёмкость робота Но это не предел. Есть кое что более крутое в плане предоставлении энергоёмкости. И мы рассмотрим характеристики улучшения "накопление опыта" для робота: # This is the amount of additional energy that fits into a robots # internal buffer for each level it gains. So with the default values, # at maximum level (30) a robot will have an internal buffer size of # two hundred thousand. bufferPerLevel=5000 Что же мы видим. За один уровень нам дают по 5000 энергоёмкости батареи. А с максимальным 30 уровнем у нас будет 150К энергоёмкости дополнительно. И давайте сравнивать. Улучшение "энергоёмкость" 3 уровня занимает в сборщике слот для улучшений 3 уровня, тратит 3 очка сложности сборки и даёт 20К энергоёмкости. Улучшение "накопление опыта" так же занимает в сборщике слот для улучшений 3 уровня, тратит 3 очка сложности сборки, но даёт при этом при 4 уровне накопленного опыта (а он у меня набрался очень быстро не сложной копалкой за 20 минут работы примерно) те же 20К энергоёмкости. А при максимальной прокачке все 150К энергоёмкости. И дополнительно к этому даются дополнительные бонусы описанные в тех же конфигах: Скорость добычи блоков: # The increase in block harvest speed a robot gains per level. The time # it takes to break a block is computed as actualTime * (1 - bonus). # For example at level 20, with a bonus of 0.4 instead of taking 0.3 # seconds to break a stone block with a diamond pick axe it only takes # 0.12 seconds. harvestSpeedBoostPerLevel=0.02 Видимо это опечатка и там имелся ввиду максимальный 30 уровень, а не 20, при котором скорость копки любых блоков в 2,5 раза быстрее стандартной. Вот это ускорение. Кроме того есть шанс не потерять прочность инструмента в зависимости от опыта робота: # The additional "efficiency" a robot gains in using tools with each # level. This basically increases the chances of a tool not losing # durability when used, relative to the base rate. So for example, a # robot with level 15 gets a 0.15 bonus, with the default damage rate # that would lead to a damage rate of 0.1 * (1 - 0.15) = 0.085. toolEfficiencyPerLevel=0.01 Честно говоря не совсем понял приведённый пример. Что вообще в нём происходит. Но у вас есть шанс на то, что предмет не потеряет прочность в руке робота. И это всё даёт одно улучшение. Ещё и ставит условие. Попробуй набрать все 30 уровней и тогда получишь максимальные бонусы. И вот после всей этой вырытой недавно инфы я вдруг натыкаюсь на форуме на вот эту тему http://computercraft.ru/blog/51/entry-602-tcitadel-%E2%84%960/ Смотрю скрины... Боже, как много улучшений ёмкости. Зачем? Поставь улучшение опыта и получишь себе крутого робота. Кстати, скажу больше, есть ещё и лайфхаки с блоками конденсаторов о которых многие вроде меня могли не знать. Интересно? Давайте взглянем в конфиги: # The amount of energy a single capacitor can store. capacitor=1600 # The amount of bonus energy a capacitor can store for each other # capacitor it shares a face with. This bonus applies to both of the # involved capacitors. It reaches a total of two blocks, where the # bonus is halved for the second neighbor. So three capacitors in a # row will give a total of 8.8k storage with default values: # (1.6 + 0.8 + 0.4)k + (0.8 + 1.6 + 0.8)k + (0.4 + 0.8 + 1.6)k capacitorAdjacencyBonus=800 Стандартная вместительность 1600, но есть бонус от соседних блоков накопителей. И как показано в примере три аккумулятора в ряд дают энергоёмкость 8.8К вместо 4.8 без бонусов. Почти в два раза энергоёмкость возросла для этого примера. Возможно кто-то знал, но для меня это вообще открытие. Ещё один лайфхак с энергией в том, что можно улучшения ёмкости для робота заряжать отдельно как предмет в заряднике, но заряжаться они будут долго. Намного быстрее они это делают в роботах. Если конечно у вас установлены слоты под улучшения в роботе. Хотя актуальность этих улучшений минимальна. Лучше робота забить действительно полезными улучшениями вместо энергоёмкости.
  42. 1 балл
    Хеллоу all, читающий этот comment. В русском языке too few слов для раскрытия этой темы, поэтому приходится заимствовать английские words. Возникли some вопросы: if compt.inventory_controller == nil then error("inventory_controller not found") endА разве component позволяет такой способ проверки? Насколько я помню, ошибка случится ещё на первой строке этого фрагмента. Для этого даже component.isAvailable придумали. Можешь пояснить, что обрабатывается в перехваченных proxy.dropIntoSlot и proxy.suckFromSlot? proxy.dropIntoSlot = function(facing, slot, count) if count == nil and self.isPotential(slot) then self.removePotentialSlot(slot) item.setSlot(slot, nil) else local item = self.getSlot(slot) if item.size == count then self.setSlot(slot, nil) else item.size = item.size - count end end return nativeDropIntoSlot(facing, slot, count) endКакой инвентарь анализируется в этом участке кода? Вряд ли инвентарь робота, т.к. номер слота в данном случае не имеет к нему отношения. И вряд ли какой-либо внешний инвентарь, т.к. не учитывается сторона, с которой находится инвентарь. А ещё интересно узнать, почему ты отказался от проверки count==nil и результатов, возвращаемых оригинальными proxy.dropIntoSlot и proxy.suckFromSlot. Разве такой отказ не может привести к рассинхронизации кэша?
  43. 1 балл
    До поры до времени я преспокойно себе использовал OpenOS'овскую библиотеку для запросов и горя не знал. Однако вскоре все больше и больше убеждался в необходимости написания более функционального аналога, устав чистить вилочкой множество однотипных "велосипедов". Основные преимущества библиотеки: Рекурсивная сериализация Lua-таблиц в формат URL-кодированной строки Обработка серверных ошибок по принципу "success, reason" без необходимости использовать pcall в каждой программе Возможность прямой загрузки файлов с сервера в указанную директорию Возможность исполнения файла по URL как Lua-программы Поддержка ручной почанковой обработки загружаемых данных Команда для загрузки: wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/web.lua /lib/web.lua -f web.serialize( string/table data ): string serializedData Преобразует входной аргумент в сериализованную строку, соответствующую спецификации HTTP-запросов. Помимо строк и чисел поддерживаются также таблицы с множеством вложенных таблиц: print( web.serialize({ string = "Hello world", number = 123, array = { arrayString = "Meow", arrayInArray = { arrayInArrayNumber = 456 } } }) ) Результат: web.encode( string data ): string encodedData Экранирует специальные символы, делая строку подходящей для осуществления запросов с множеством специфических данных: print( "http://buttex.ru/test.php?message=" .. web.encode( "Привет, как дела?" ) ) Результат: web.request( string url, [string/table postData, table headers] ): string result, string reason Всем знакомый запрос к указанной URL, возвращающий строковый ответ с сервера. При указании аргумента postData сервер получит соответствующие данные в POST-массив, а при указании headers он получит кастомные заголовки. Для примера я создал PHP-скрипт на домашнем сайте, возвращающий GET/POST-данные запроса, так мы сможем легко отслеживать успешность передачи содержимого: <?php echo("\nСодержимое 'GET':\n"); print_r($_GET); echo("\nСодержимое 'POST':\n"); print_r($_POST); ?> Если требуется осуществить обращение к серверу, принимающему исключительно GET-запросы, используем сериализацию данных для удобства и присоединим результат к исходной URL: local result = web.request( "http://buttex.ru/test.php?" .. web.serialize({ string = "Hello", number = 123 }) ) print(result) В результате сервер вернул переданные данные GET-запроса: Осуществим POST-запрос к скрипту, указав таблицу в качестве аргумента postData: local result = web.request( "http://buttex.ru/test.php", { string = "Hello", number = 123 } ) print(result) Теперь сервер вернул переданные данные POST-запроса: web.download( string url, string path ): boolean result, string reason Метод для загрузки файла по URL в указанную директорию. Возвращает true в случае успеха и false, reason в случае неудачи. К примеру, следующий код загрузит в корень диска программу "матрица": web.download("https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Screensavers/Matrix.lua", "/matrix.lua") web.run( string url, ... ): ... Крайне полезная фича для быстрого запуска файла в виде Lua-программы, в которую передаются все указанные через "..." аргументы. Возвращает данные скрипта в случае успеха и false, reason в случае неудачи. Для примера запустим все ту же "матрицу: print( web.run( "https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Screensavers/Matrix.lua" ) ) Результат: web.rawRequest( string url, string/table postData, table headers, function chunkHandler, [int chunkSize]): boolean result, string reason Напоследок метод, позволяющий осуществить ручную обработку загружаемых данных почанково. Для примера напишем программу, выдающую содержимое страницы vk.com через print() маленькими порциями по 20 символов. Разумеется, никаких postData и headers указывать не требуется: print( web.rawRequest( "https://vk.com/", nil, nil, function(chunk) print(chunk) end, 20 ) ) Результат:
  44. 1 балл
    Немного перемудрил с переменными, смотрите как сразу перекосило ее
  45. 1 балл
    Скептики говорят, что это связано только с низкой популярностью Линукса. А вот, когда пользователи, купившись на ложные обещания защищенности, массово пересядут на Линукс, то непременно начнут работать из-под рута. Вирусописатели, почуяв вкус свежей крови, тут же завалят сеть своими творениями, а тогда уже и хваленые *nix-сервера тоже попадают. Вот, тогда и вспомнит мир Билла Гейтса с его великим творением. OpenOS еще можно спасти. Но для этого надо не антивирусы писать, а постепенно пересаживать игроков на Таум. В нем вирусов нет, только порча.
  46. 1 балл
  47. 1 балл
    Представьте, что вы написали программу, и вам нужно, чтобы некоторые настройки этой программы сохранялись на диск и считывались, да так, чтобы сам файл настроек был читаем, содержал комментарии, легко редактируем с помощью текстовых редакторов и сохранял целостность самого файла после перезаписи (не путал строки). Всё выше перечисленное я добавил в эту небольшую библиотеку, и честно сказать результатом доволен. Скачать можно коммандой с pastebin: pastebin get qDRfwGX3 /libs/settings.lua Функции Формат файла Методы Свойства Операторы (взаимодействие) Пример использования Старые версии (вдруг кому надо...) Библиотека ещё будет дорабатываться, в соответствии с вашими пожеланиями. Надеюсь оцените .
  48. 1 балл
    Хочу поделиться с вами крайне полезной в быту библитекой, которую мы с товарищами используем повсеместно. Она позволяет работать с несколькими цветовыми моделями: стандартной RGB, более современной HSB, преобразовывать их в HEX-цвет для OpenComputers и наоборот. Кроме того, она позволяет сжимать 24-битный цвет вида 0xFFFFFF до 8-битного вида 0xFF без потери качества. Команда для загрузки: wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/colorlib.lua lib/colorlib.lua -f Методы
  49. 1 балл
    Вот и правильно, библиотек хоть жопой жуй, а игр - раз, два и обчелся. Нужно больше игр!
  50. 1 балл
    Простая программа, дающая возможность наглядно управлять файлами, которые будут поставлены в очередь автозагрузки при включении компьютера. Команда для скачивания: pastebin run Tg2YLrcc Пример выполнения скриптов: Структура файла autorun.lua:
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...