HeroBrine1st
Пользователи-
Публикации
134 -
Зарегистрирован
-
Посещение
-
Победитель дней
21
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя HeroBrine1st
-
Я не имею доступа к переменной, поэтому спасает только ребут. А выкладывать прогу на гитхаб, знаете ли, плагиатом называется. А шрифт и отсутствие списков из-за того, что я сначала написал в группу вк, а оттуда потом скопировал и вставил сюда А, да. Его продвинутость - не сбиваемость. Есть защита от дурака, поэтому он настолько продвинутый. И он походу не ломает зарядник, я это не тестил, но предусмотрел. Насчет процессора - на моей конфигурации там сложность 31/32, все из-за инвентарей и батареек.
-
Делал для себя - сделал почти эталон). Робот копает шахту НЕ по прямой, часто делает круги (ибо рандом), но не тупит. Поворот каждые 10 блоков, настраивается. Как только робот обнаруживает, что последний слот занят (а поскольку размер инвентаря можно узнать только через контроллер инвентаря, вам надо самим его указать, это все в переменной, почему в переменной - объясню позже), он возвращается на базу (есть защита от дурака - робота с пути не сломить) и выгружает все в сундук под ним, потом ждет полной зарядки и перезагружается. Перезагрузка для освобождения переменной записи движений робота, поэтому надо ставить программу в авторан, по этой же причине все параметры программы в переменных. Когда ставите робота, сундук ставьте под робота, сбоку зарядное устройство (желательно справа, меньше шанс что робот сломает зарядник, хотя я это тоже предусмотрел), зарядник запитываете редстоуном и энергией. Установка: 1. Устанавливаете программную навигацию для робота - pastebin get -f Hb32aQeR /lib/robot.lua (http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/) 2. Устанавливаете саму программу - pastebin get -f PZGzqbdk /autorun.lua 3.Заходите в код, ищете 2 переменные - OTMI и inventorySize. Первая переменная отвечает за поворот каждые n блоков. Вместо n подставляется значение этой переменной. Не рекомендую ставить больше 25. По умолчанию 10. inventorySize отвечает за количество слотов в инвентаре. Если вам лень считать, берете количество улучшений инвентаря и умножаете их число на 16, полученное значение подставляете в переменную inventorySize. 3.1. Для чайников в lua: Переменные OTMI и inventorySize находятся на 14й и 15й строке. Если вы снова не поняли, куда подставлять, подставляйте числа вместо чисел, которые стояли до вашей настройки 4. Перезагружаете (кирку обязательно, хотя лучше молот из тинкера из какого нибудь прочного материала, например бедрокия (бедрокий из магических модов)) 5. Робот начинает копать. Что скажу по конфигурации: 1. Чанклоадер ОБЯЗАТЕЛЬНО 2. Для установки чанклоадера нужен процессор 3го уровня, так что ставьте его 3. ОЗУ на свое усмотрение, рекомендую 3го уровня 4. как минимум 2 улучшения инвентаря 5. батареек как можно больше Если отловите баг, напишите в комментарии.
-
Предложу более усовершенствованный способ возвращения назад. Очень полезен для автономных роботов-шахтеров, ибо робот возвращается передом и ломает блоки перед собой. local robot = require('robot') robot.setPath(true) --ваш код local path = robot.getPath() local invert = { ['F'] = 'forward', ['B'] = 'back', ['L'] = 'right', ['R'] = 'left', ['U'] = 'down', ['D'] = 'up' } robot.turnAround() for i = #path, 1, -1 do robot.swing(3) os.execute('go '..invert[string.sub(path, i, i)]) end robot.turnAround()
- 2 ответа
-
- navigation
- robot
- (и ещё 3 )
-
Сначала измени текст на самом элементе, а потом перерисовывай. когда ты меняешь начальную переменную, ты меняешь только ее значение, у других переменных значение не меняется.
-
У меня, кстати, есть нерабочий антивирус, но логически он работать должен. UPD: я когда-то всю его мощь подменил на вот этот код.. но я все= выложу local component = require("component") local computer = require("computer") local event = require("event") local ecs = require("ECSAPI") local w, h = component.gpu.getResolution() _G.accessEEPROM = false function startMonitoringEEPROM() local eepromSet = package.loaded.component.eeprom.set package.loaded.component.eeprom.set = function(string) if not _G.accessEEPROM then local oldPixels = ecs.rememberOldPixels(1,1,w,h) ecs.error("EEPROM Flash aborted: permission denied") ecs.drawOldPixels(oldPixels) return false end return eepromSet(string) end end function onComponentAvailableEEPROM(componentType) if componentType == "eeprom" then startMonitoringEEPROM() end end event.listen("init",function() event.listen("component_available",onComponentAvailableEEPROM) startMonitoringEEPROM() end) Но алгоритм был такой: 1. Прослушивание сигнала init 2. запуск мониторинга компонентов 3. при вызове eeprom.set подменить функцию load и либу component,затем вызвать в corountine код 4. если подмененные функции находят участки кода,совпадающие с невирусным биосом (fs.open("/init.lua"), load(code,"=init") и подобное), создают ошибку No viruses, которая перехватывается corountine и возвращает false, "No viruses". 5. если ошибка есть, прошить eeprom, иначе создать ошибку "Access denied: virus detected" Но алгоритм можноь улучшить на 4м этапе. при обнаружении участка кода, который не относится к вирусу и спокойно пытается запустить openos, создать сигнал "antivirus",*code*,"No viruses" и через corountine.running() и corountine.yeld(...,"No viruses") остановить выполнение кода. в итоге мы получаем антивирус, который проверяет код eeprom на вирусы. хотя если бы нам выдали функцию debug.setHook, антивирус был бы лучше - крюки прослушивали бы строки, которые вызывает программа, и если обнаруживают while true do или подобное, просто прерывают программу и создают ошибку Access denied: virus detected. и это должно работать.
-
Предлагаю сделать в биосе закачивание всего нужного в /tmp и загрузку с него. я кстати уже потихоньку начинаю этим заниматься
-
при мягкой перезагрузке
-
"Вот это относится к синтаксису". строки ведь относятся к синтаксису, а что внутри них может вызвать ошибку string.find.
-
Еще я видел в plan9k computer.setArchitecture("Lua 5.3") или подобное. не факт что сработает, но поройся в исходниках plan9k Это так, если надо программно.
-
у меня такая методика изучения языков,поэтому учебники не годятся. Сначала синтаксис, потом самая базовая функция, потом обширный проект и через него я начинаю учить язык полностью, возникает много вопросов и главное - практика И в какой раз говорю, что бы я не делал оно возвращает nil. Сверху мне наконец ответили, поэтому вопрос закрыт И поскольку мой перфекционист страдает, подскажу, нет слова вообщем, есть только "в общем"
-
пишет ошибку, что не может вызвать метод responce т.к. он nil. менять url пробовал, не помогает. com = require("component") net = com.internet req = net.request("https://pp.userapi.com/c638822/v638822414/2d563/6UNAy7oum-w.jpg") --первая встречная картинка, если че не реклама) print(req) responce = {req.responce()} print(require("serialization").serialize(responce)) os.sleep(1) repeat s=req.read() if s then print( #s ) end until not s
-
то есть я должен вычитать длину чанков из общей длины чанков, и как эта длина закончится, то файл скачан, верно? и из-за пустых чанков мой браузер может ожидать столько времени до начала скачки что ли? И вычислять скорость скачивания я должен по тому, какая длина чанка скачалась за определенное время? Т.е. по формуле U = S/T, где U - скорость, S - длина чанка, а T - время?
-
Короче мне надо сделать скачку файлов как в любом загрузчике для виндовса - итоговый размер файла, название и сколько осталось до конца скачивания. костыли через internet.connect не работают. можно узнать скорость интернета через скачивание файла весом в 1024 байт, но нельзя узнать размер файла. А я прямо горю желанием сделать диспетчер загрузок, ведь мой браузер как-то видит размер файла до закачки
-
Таблица не воссоздаётся из строки
HeroBrine1st ответил в вопрос HeroBrine1st в Разные (отсортировать)
зато ОЗУ не тратится) serilization в озу много весит -
и не пофиксит. эта функция является C функцией машины. проще говоря, время lastModified берет не с потолка, а читает через C библиотеку время создания файла и отправляет в lua
