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

Totoro

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

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

  • Посещение

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

    289

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

  1. Интересные ссылки: Wiki ООП
  2. Можно так же прописать в файл startup, для автозапуска хоста shell.run("gps", "host", x, y, z) Находим наши координаты x, y, z = gps.locate(5) print(x, y, z)
  3. num1 = {119, 68, 61, 109, 78, 107, 123, 69, 127, 111} num2 = {15232, 8704, 7808, 13952, 9984, 13696, 15744, 8832, 16256, 14208} while true do time = textutils.formatTime(os.time(), true) len = string.len(time) if len == 4 then h1 = 0 else h1 = string.sub(time, 1, 1) end h2 = string.sub(time, len-3, len-3) m1 = string.sub(time, len-1, len-1) m2 = string.sub(time, len, len) rs.setBundledOutput("back", num1[h1+1]+num2[h2+1]) rs.setBundledOutput("bottom", num1[m1+1]+num2[m2+1]) sleep(0.1) end
  4. Компьютер: rednet.open("top") while true do event, key = os.pullEvent() print("key = ", key) rednet.send(2, tostring(key)) end Черепашка: rednet.open("right") while true do sender, command = rednet.receive() if command == "17" then turtle.forward() elseif command == "31" then turtle.back() elseif command == "30" then turtle.turnLeft() elseif command == "32" then turtle.turnRight() elseif command == "42" then turtle.down() elseif command == "57" then turtle.up() elseif command == "18" then turtle.dig() elseif command == "16" then turtle.place() end end
  5. pword = "123" core = "9" local function clear() term.clear() term.setCursorPos(1, 1) end local function pulse(side, freeze) rs.setOutput(side, true) sleep(freeze) rs.setOutput(side, false) end function os.pullEvent() local event, p1, p2, p3, p4, p5 = os.pullEventRaw() if event == "terminate" then write("Nice try :D") end return event, p1, p2, p3, p4, p5 end while true do clear() write("Lock system\nPassword: ") input = read("*") if input == pword then pulse("left", 3) elseif input == core then break end end
  6. Удобная вещь. Есть готовый набор компонентов на все случаи жизни, и более менее выглядит нормально. Чем-то на Bootstrap похоже. Хотя я вот сейчас другой проект делаю, и думаю попробовать с нуля собрать дизайн. В своём стиле. Посмотрим, получится или нет.
  7. Компьютер-пешка: side = {"top", "right", "bottom", "left"} host = 1 rednet.open("back") local function bin(s) if rs.getInput(s) then return 1 end return 0 end while true do sender, msg = rednet.receive() if sender == host then concat = "" for i = 1, #side do concat = concat .. bin(side[i]) end rednet.send(sender, concat) end end Сервер-опросчик: id = {0, 3, 4} rednet.open("back") local function bin(element) if element == "1" then return "true" end return "false" end local function format(str) local form = "" for i = 1, string.len(str) do form = form .. "#" .. i .. " - " .. bin(string.sub(str, i, i)) .. "\n" end return form end while true do sender, msg = rednet.receive() if msg == "batstat" then concat = "" for i = 1, #id do rednet.send(id[i], "") thisId, thisIdAnswer = rednet.receive(5) concat = concat .. thisIdAnswer end rednet.send(sender, format(concat)) end end
  8. tArgs = {...} Интересные ссылки: Parallel API
  9. Lib function write2file(path, array) f = fs.open(path, "w") for i = 1, #array do f.writeLine(array[i]) end f.close() end function readFromFile(path) f = fs.open(path, "r") local array = {} local i = 1 local temp while true do temp = f.readLine() if not temp then break end array[i] = temp i = i + 1 end f.close() return array end function array2String(array, d) string = "" for i = 1, #array do string = string .. array[i] .. d end return string end Send local args = {...} os.loadAPI("lib") array = lib.readFromFile(args[1]) string = lib.array2String(array, "\n") rednet.open("top") rednet.send(tonumber(args[2]), string) Receive os.loadAPI("lib") rednet.open("top") id, msg = rednet.receive() print(msg) array = {} array[1] = msg lib.write2file("test", array)
  10. tArgs = {...} local FFormat = ".arch" local nFile, nDir, size = 0, 0 if #tArgs < 3 then print("Usage:" .."\nTo zip folder and its files and subfolders use" .."\narchive zip... " .."\nIn you able to set folders that will be skipped, for example \"rom\" " .."\n\nTo unzip zipped archive to selected folder use" .."\narchive unzip" .."\n\nThis app is useful with pastebin.\nProgrammed by 1Ridav") end local function fopen(path, mode) local f = fs.open(path, mode) if not f then print("ERROR: Could not open "..path.." with mode \""..mode.."\"") exit() end return f end local function skip(df) for i = 3, #tArgs do if tArgs[i] == fs.getName(df) then return true end end return false end local function zip(file) print("zipping: ".. file) local f = fopen(file, "r") local z = textutils.serialize(f.readAll()) f.close() return z end local function ZIP(path) local list = fs.list(path) local array = {} local t, name, d = 0, "", 0 for i = 2, #list * 2, 2 do t = i/2 local tpath = path.."/"..list[t] if fs.isDir(tpath) then if not skip(tpath) then name = "D:"..list[t] array[i] = ZIP(tpath) nDir = nDir + 1 end else name = "F:"..list[t] array[i] = zip(tpath) nFile = nFile + 1 end array[i - 1] = name end return textutils.serialize(array) end local function unzip(text, path) print("unzipping: "..path) local f = fopen(path, "w") f.write(textutils.unserialize(text)) f.close() end local function UNZIP(text, path) local array = textutils.unserialize(text) local unz, dp local d = 0 for i = 2, #array, 2 do if string.sub(array[i-1], 1, 1) == "D" then dp = string.sub(array[i-1], 3, #array[i-1]) fs.makeDir(path.."/"..dp) UNZIP(array[i], path.."/"..dp) nDir = nDir + 1 elseif string.sub(array[i-1], 1, 1) == "F" then local p = string.sub(array[i-1], 3, #array[i-1]) unzip(array[i], path.."/"..p) nFile = nFile + 1 end end end local function result() print("\nDone" ,"\n size: " ,size, " B " ,math.floor(size/1024), " KB" ,"\n Files: ", nFile ,"\n Folders: ", nDir ) end if tArgs[1] == "zip" then if fs.exists(tArgs[2]) and fs.isDir(tArgs[2]) then local zipped = ZIP(shell.resolve(tArgs[2])) local f = fs.open(tArgs[3]..FFormat, "w") f.write(zipped) f.close() zipped = nil size = fs.getSize(tArgs[3]..FFormat) result() end elseif tArgs[1] == "unzip" then local f = fopen(tArgs[2], "r") if not fs.exists(tArgs[3]) then fs.makeDir(tArgs[3]) end UNZIP(f.readAll(), tArgs[3]) size = fs.getSize(tArgs[2]) result() end
  11. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: SDV. Что Мы знаем о сервисах для хранения фрагментов кода? Наверное ничего. А какое количество данных сервисов? Наверное их можно по пальцам пересчитать. На данном форуме большой популярностью пользуется сервис Pastebin, но есть еще несколько интересных сервисов о которых я сейчас хочу рассказать. Многие наверняка о них слышали, а возможно и использовали. Pastebin Pastebin — веб-приложение, появившееся в 2002 году, которое позволяет загружать отрывки текста, обычно фрагменты исходного кода, для возможности просмотра окружающими. Используется многими программистами для публикации кода всем желающим. На данный момент поддерживает большой список синтаксиса кода. Язык Lua не исключение. Плюсы: 1. Удобная форма публикации, как с сайта, так и с opencomputers-устройств 2. Система конфиденциальности файлов (наличие приватного и публичного доступа к файлу) 3. Удобная система передачи файлов благодаря QR-коду (нет необходимости вводить id файла) 4. Функция публикации фрагмента кода на своем сайте (через frame или JS-виджет) Минусы: 1. Отсутствие русского языка в интерфейсе сайта. Не критично (все интуитивно понятно) GitHub Gist GitHub Gist — дополнение к сервису GitHub, которое позволяет загружать, публиковать и делиться фрагментами кода между участниками GitHub и не только. В наличии имеет форму для выбора предварительного синтаксиса кода, а также кнопки выбора конфиденциальности кода. Плюсы: 1. Все фрагменты кода автоматически прикрепляются к аккаунту GitHub 2. Система комментирования и функция форка (ответвление) 3. Система контроля версиями (изменениями) в коде 4. Система работы как с Git (через Git, SSH, Subversion) 5. Функция публикации фрагмента кода на своем сайте (через JS-виджет) Минусы: 1. Отсутствие русского языка в интерфейсе сайта 2. Отсутствие lua-программы в opencomputers, позволяющая скачивать код 3. Слишком длинные сгенерированные хеш-URL для кода ideone.com ideone.com — сервис для публикации фрагментов исходного кода. Главное отличии от всех существующих сервисов для хранения фрагментов кода - функция компилирования (интерпретирования) введенного кода в форму. Плюсы: 1. Наличие функции компилирования (интерпретирования) кода (можно прям на сайте увидеть результат выполнения программы) 2. Частичная русификация интерфейса сайта 3. Выбор времени компиляции (5 или 15 секунд) 4. Наличие формы ввода данных (stdin) 5. Функция публикации фрагмента кода на своем сайте (через JS-виджет) 6. Функция форка (ответвление) 7. Кнопка создание собственного шаблона (паттерна) для использования его как заготовки для дальнейших фрагментов кода программ Минусы: 1. Отсутствие lua-программы в opencomputers, позволяющая скачивать код 2. Отсутствие системы передачи файлов через QR-код 3. Отсутствие возможности указания собственных названий для опубликованных фрагментов кода hastebin hastebin — веб-приложение с базовым функционалом pastebin, но в хакерском стиле. Просто вставьте текст и нажмите «Сохранить». Необязательно даже запускать браузер, потому что из Linux или OS X можно отправить текст на сервер командой из консоли (URL скопируется в буфер обмена). Плюсы: 1. Минималистичный дизайн приложения 2. Интуитивно понятный интефейс 3. Хранение кода в течении 30 дней с момента последнего просмотра 4. Наличие RAW-режима Минусы: 1. Отсутствие lua-программы в opencomputers, позволяющая скачивать код 2. Отсутствие системы передачи файлов через QR-код 3. Отсутствие возможности указания собственных названий для опубликованных фрагментов кода 4. Отсутствие возможности самостоятельного удаления фрагмента кода из базы (только автоматически через 30 дней с момента последнего просмотра) Итак, Мы рассмотрели 4 самых популярных сервиса для хранения фрагментов кода. Выбирать Вам, что именно использовать, но помните - иногда лучшее не то что популярно На этом я закончу обзор. С уважением к Вам, TuxShot
  12. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Krutoy. Как известно, чем лучше инструмент, тем выше скорость работы. Я программирую на Lua больше года, и перепробовал множество инструментов. В этой статье я покажу, какие есть инструменты для успешного программирования на Lua для двух модов Minecraft'а: ComputerCraft и OpenComputers. 1. Внутриигровой редактор Умеет уйму недостатков и неудобен в работе, за то всегда под рукой. Для ComputerCraft есть программа "LuaIDE", которая входит в состав операционки OneOS (второй скрин) Для OpenComputers пока редакторов кроме стандартного нет. Пара советов для редактора OC: Для быстрого поиска существующего файла в консоли введите первые символы и жмите TAB, например edit i [TAB] --> edit /init.lua Для удаления всей строки нажмите CTRL+DELETE 2. Текстовые редакторы Их несколько: Notepad++ Стандарт скриптовика. Прост и легок в обращении. Плюсы - малый размер, куча плагинов и расширений. Лучшее средство для начинающего программиста Lua. Sublime Text Более продвинутый инструмент. Плюсы - расширенный интерфейс, выбор из разнообразных тем, поддержка плагинов, включая подсветку ошибок при написании кода. Сам пользуюсь этим редактором на компе, расширив плагинами Corona Editor, Lua Love, Sublime Linter - lua SciTE, Atom Для хипстеров. По функционалу такие же как выше. Для удобной работы с компьютерными модами есть несколько приемов: - Через папку сохранения в одиночной игре: В Windows это папка, примерно C:\Users\UserName\AppData\Roaming\.MC\ServerName\saves\Computers\opencomputers\address-address-add-addrs Сохраненные файлы в папке жесткого диска игрового компьютера будут тут же там обновляться. Не забудьте изменить в конфиге \config\OpenComputers.cfg значение bufferChanges на false: - Через Pastebin: Пишете код в редакторе Вставляете его на Pastebin Вписываете код для запуска в игре (заменив XXXXXX на код пасты): pastebin get XXXXXX name - Через облачное хранилище с прямыми ссылками: Сохраняйте и работайте с файлами прямо в папке облачного хранилища, с возможностью доступа по прямым ссылкам. Например, в дропбоксе это папка Public (в новых аккаунтах ее нет) Загружайте обновленные файлы на ОС компьютер через интернет-плату программой wget, получив прямую ссылку на файл, например: wget -f https://dl.dropboxusercontent.com/u/12345678/file.lua Для удобства вы можете написать короткую программу, которая при нажатии клавиши, например F5, будет выполнять такую загрузку автоматически 3. IDE IDE - Интегрированная среда разработки. Это мощное средство редактирования и отладки кода. Сильно упрощает работу с большими проектами, но более сложен в освоении. Основное преимущество IDE - отладка кода посредством точек останова и отображения значений переменных при работе программы. Рассмотрим по отдельности: ZeroBrane Studio Суперлегкая (у меня занимает 17мб оперативки) и быстрая кроссплатформенная IDE. Визуальные темы, мониторинг переменных, выделение локальных и глобальных переменных, проверка на неиспользуемые переменные и прочие ништяки. Lua Development Tools Преимуществ от ZeroBrane практически нет, скорее минусы в роде отсутствие темной темы и требовательности к оперативке. Cloud 9 Облачное браузерное IDE. По стандарту отсутствует отладка. Ее нужно устанавливать в проект самостоятельно. Плюс - вам не нужно ничего устанавливать на компьютер. Но самое приятное, что к каждому файлу в этой IDE можно обратиться по постоянной прямой ссылке, что крайне упрощает заливку файла в игру. Так же, вы можете раздавать ссылку на проект другим и совместно редактировать код. Сам я использую Sublime для быстрого редактирования файлов, LDT для больших проектов на стадии написания кода, Cloud9 для совместных проектов с другими программистами, и для отладки текущих проектов в игре. О ZeroBrane Studio узнал совсем недавно, поэтому планирую перейти на нее в ближайшее время, что и другим советую.
  13. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Semoro. В этом видео я и Сябро рассказываем про настройку файловой системы диска для работы
  14. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Semoro. В этом видео я и Сябро рассказываем о компонентах мода Open Computers
  15. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: fenixrus. Здравствуйте с вами Fenixrus и я начинаю серию гайдов по API мода OpenComputers. Начнем мы с Component API. Вообщем смотрим, изучаем, пробуем, комментируем! https://www.youtube.com/watch?v=hStnB3hCpFs
  16. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: ShuraGamer. Сначала выскажу огромное спасибо @Totoro, @Alex, @Fingercomp, @LeshaInc за их программы, благодаря которым более-менее смог разобраться в очках. Небольшая предыстория(кому неинтересно, основной текст ниже): Началось все с дверного замка Тоторо, в котором использовались неведомые мне до этого очки для вывода информации под названием Terminal Glasses. Мне захотелось побольше узнать о них, но увы-ни в каких, даже англоязычных источниках подробного гайда я не нашел. Спросил на форуме, может кто знает? Кибер предложил написать гайд самому, на халяву вайт получить. Тут-то , немного покопавшись в документации,я и осознал весь размер подложенной мне свинки... Я, наивная душа, подумал, а, фигня, тут же только вывод данных! OpenPeripheral оказался отдельным модом, и писать гайд только по одной его части не имеет особого смысла. Так что придется разбираться полностью. А пока что-держите первую часть гайда по моду OpenPeripheral - Terminal Glasses! Приятного ознакомления! Итак, начнем мы с физической части нашей парочки - Terminal Glasses и Terminal Glasses Bridge. В дальнейшем я буду называть их "очки" и "мост" для простоты. Методы API одинаковы как в ОС, так и в СС Начнем с принципа работы очков. Он достачно прост: информация передается с компьютера на мост, а с моста уже на очки(прим. Можно подключить несколько очков). Если честно, я хз, как данные передаются на очки, видимо тут квантовая зависимость поиграла... Итак, мы ставим мост рядом с компьютером. Далее мы подключаем очки к мосту, просто райткликнув ими по блоку. Готово! Все подготовления завершены, можем начинать программировать! Сначала подключаем мост к компу: OC -- com = require('component') bridge = com.openperipheral_bridge CC -- bridge = peripheral.wrap(сторона подключения к компьютеру) Или bridge=peripheral.wrap("bridge") Теперь мы разбираемся с API: brige.addBox([X-координата], [Y-координата] , [Размер по вертикали] , [Размер по горизонтали], [Хексадецимальный код*], [Прозрачность**]) -- добавляет прямоугольник по заданным параметрам. *Хексадецимальный код - цветовой код, подробнее - гугл. Малая таблица цветов: Черный #000000 Белый #FFFFFF Красный #FF0000 Зеленый #00FF00 Синий #0000FF Желтый #FFFF00 Морская волна #00FFFF Розовый #00FF00 Подробная таблица цветовых кодов:Тык! Цвета подаются в программу в виде 0xКОД, например 0x000000 **Прозрачность: 1 - полностью видимый; 0 - еле заметный(Дробные числа работают) bridge.addText([X-координата], [Y-координата] , [Строка] , [Хексадецимальный код]) - выводит строку в нужных координатах. bridge.clear() - сбрасывает все данные в мосте. Итак, вы все еще помните принцип передачи данных? Так вот, сами собой данные в очках не появятся, мы должны вручную "отправлять" картинку с моста на очки(При отправлении данных с моста на очки вся предыдущая информация сбрасывается) В этом нам поможет bridge.sync(). Для ясности мы напишем небольшую программку, которая показывала бы нам точное время(Напишем ее на OC): --TIMEONGLASSES-- com = require('component') bridge = com.openperipheral_bridge function addbox() bridge.addBox(1,1,80,10,0xFFFFFF,0.2) end function addtime() datetime = os.date("!*t",os.time()) time ="TIME"..datetime.hour..":"..datetime.min bridge.addText(5,2,time,0xFF0000) end --MAIN-- while true do bridge.clear() addbox() addtime() bridge.sync() os.sleep(0.1) end Итак, господа, разберем по полочкам вышенаписанную программу Функция addbox() создает почти прозрачный прямоугольник слева сверху на экране Функция addtime() выводит текущее время, кому интересна строчка: datetime = os.date("!*t",os.time()), прошу по ссылке: Тык! Далее мы смотрим на главный цикл. Разберем его построчно while true do и end - бесконечный цикл bridge.clear() - очищаем мост для новой информации addbox(),addtime() - добавляем табличку со временем bridge.sync() - отсылаем табличку на очки os.sleep(0.1) - ждем десятую секунды Всем спасибо за внимание, надеюсь, помидоры будут не сильно тухлыми :/ P.S. BB-зло!
  17. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Krutoy. Представляю вашему вниманию программу для заправки черепашки из озера лавы. Демонстрация работы: Прыгните в ад и поставьте черепашку возле лавы. Не забудьте дать ей имя командой label, что бы не потерять заряд. Загрузите в черепашку код и запустите его: pastebin get wVjMPJrL LakeDry Положите ведро с лавой в первый слот Укажите размеры озера для высушки. Х - вправо, Y - вперед, Z - вниз. Вот и всё, черепашка пошла "выпивать" указанную площадь. Скорость - 50 ведер\минута. Исходники (не советую к просмотру, там не убрано) - http://pastebin.com/wVjMPJrL
  18. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: cloud. Нужно: Комп. Датчик движения (лучше несколько). Сирена из Nuclear Control (можно и что-нибудь другое). Котэ При обнаружении движения злоумышленника, программа выводит его имя на экран и смотрит в вайтлист, если такая фамилия там не числится - включается сирена. Тут код.
  19. Ну, всё таки не все программы перерисовывают весь свой контент 20 раз в секунду. А значит надо как-то уловить момент, когда перерисовать экран таки стоит.
×
×
  • Создать...