Advertisement
Guest User

SkyPad.lua

a guest
Feb 4th, 2020
931
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.19 KB | None | 0 0
  1. local component = require("component")
  2. local computer=require("computer")
  3. local event = require("event")
  4. local term = require("term")
  5. local shell = require("shell")
  6. local fs = require("filesystem")
  7. local unicode=require("unicode")
  8. local serial = require("serialization")
  9. if not component.isAvailable("opencb") then
  10.     print("Подключите командный блок: opencb")
  11.     os.sleep(3)
  12.     os.exit()
  13. end
  14. if not fs.exists("/lib/sky.lua") then
  15.     shell.execute("wget https://www.dropbox.com/s/8ak2iakw4r4y7td/sky.lua?dl=1 /lib/sky.lua")
  16. end
  17. local sky = require("sky")
  18. local g = component.gpu
  19. event.shouldInterrupt = function () return false end
  20. --------------------Настройки--------------------
  21. local WIDTH, HEIGHT = 146, 42 --Разрешение моника 146/112 x 42
  22. local PASS = "78783811" --Пасс
  23. local COLOR1 = 0x00ffff --Рамка
  24. local COLOR2 = 0x0000ff --Цвет кнопок
  25. local COLOR3 = 0x333333 --Таблица
  26. local COLOR_SHELL = 0xff00ff --Цвет шелла
  27. -------------------------------------------------
  28. if not (fs.exists(shell.getWorkingDirectory() .. "/Programms.lua")) then
  29.     shell.execute("wget https://www.dropbox.com/s/vumy87kf8zs6td6/Programms.lua?dl=1")
  30. end
  31. if not (fs.exists("/autorun.lua")) then
  32.     print("\nНастройка автозапуска...")
  33.     file = io.open("/autorun.lua", "w")
  34.     file:write("local shell = require('shell')\nlocal term = require('term')\nos.sleep(0.5)\nterm.clear()\nlocal dir = '" .. shell.getWorkingDirectory() .. "'\nif dir ~= '/' then shell.setWorkingDirectory(dir) end\nshell.execute('SkyPad')")
  35.     file:close()
  36.     os.sleep(1)
  37. end
  38. print("\nИнициализация...")
  39. os.sleep(2)
  40. print("Запуск программы...")
  41. os.sleep(2)
  42.  
  43. local mid = (WIDTH-32)/2+32
  44. local login, prog, tech = false, false, false
  45. local sel = 0
  46.  
  47. g.setResolution(WIDTH, HEIGHT)
  48. sky.logo("SkyPad", COLOR1, COLOR2, WIDTH, HEIGHT)
  49. g.setForeground(COLOR2)
  50. for i = 1, HEIGHT do
  51.     g.set(29, i, "||")
  52. end
  53.  
  54. file = io.open(shell.getWorkingDirectory() .. "/Programms.lua", "r")
  55. local progs = serial.unserialize("{" .. file:read(9999999) .. "}")
  56. file:close()
  57.  
  58. function Login()
  59.     login = false
  60.     prog = false
  61.     tech = false
  62.     sky.clearL(HEIGHT)
  63.     sky.clearR(WIDTH,HEIGHT)
  64.     Rules()
  65.     g.setForeground(COLOR1)
  66.     sky.word(mid - 28,7, "mcskill", 0x222222)
  67.     --users={computer.users()}
  68.     --for i=1, #users do
  69.     --    computer.removeUser(users[i])
  70.     --end
  71.     sky.midR(WIDTH,32,"Введите пароль:")
  72.     term.setCursor(mid-2,33)
  73.     local p, nick = sky.read({mask = "*", max = 8, accept = "0-9a-f", blink = true, center = true, nick = true})
  74.     if p == PASS then
  75.         if (sky.checkOP(nick)) then
  76.             login = true
  77.             sky.midR(WIDTH,33,"Приветствую, " .. nick)
  78.             computer.addUser(nick)
  79.             os.sleep(2)
  80.             sky.clearL(HEIGHT)
  81.             sky.clearR(WIDTH,HEIGHT)
  82.             Rules(nick)
  83.             Table()
  84.         else
  85.             sky.midR(WIDTH,34,"Даже, зная пароль, просто так")
  86.             sky.midR(WIDTH,35,"ты сюда не войдёшь")
  87.             os.sleep(2)
  88.             sky.midR(WIDTH,37,"Петушинная морда")
  89.             os.sleep(3)
  90.             Login()
  91.         end
  92.     else
  93.         sky.midR(WIDTH,33,"Неверный пароль")
  94.         if (component.isAvailable("opencb")) then
  95.             component.opencb.execute("thor " .. nick)
  96.         end
  97.         os.sleep(2)
  98.         Login()
  99.     end
  100. end
  101.  
  102. function Rules(nick)
  103.     if (login) then
  104.         g.setForeground(COLOR2)
  105.         sky.midL(WIDTH,5,"==========================")
  106.         sky.midL(WIDTH,11,"==========================")
  107.         sky.midL(WIDTH,15,"==========================")
  108.         sky.midL(WIDTH,31,"Добро пожаловать")
  109.         g.setForeground(COLOR1)
  110.         sky.midL(WIDTH,3, "Общая инфа:")
  111.         sky.midL(WIDTH,6, "Монитор в идеале 5х3")
  112.         sky.midL(WIDTH,7, "блока, чтоб не париться.")
  113.         sky.midL(WIDTH,8, "Но если над другой, то")
  114.         sky.midL(WIDTH,9, "в настройках каждой проги")
  115.         sky.midL(WIDTH,10, "меняйте параметр WIDTH")
  116.         sky.midL(WIDTH,12, "Autorun ставится свой,")
  117.         sky.midL(WIDTH,13, "но его можно")
  118.         sky.midL(WIDTH,14, "редачить под себя")
  119.         sky.midL(WIDTH,32,nick)
  120.         sky.button(7,34,18,3,COLOR1,COLOR2,"Обновить")
  121.         sky.button(7,37,18,3,COLOR1,COLOR2,"Выйти")
  122.     end
  123. end
  124.  
  125. function TechPanel()
  126.     prog = false
  127.     g.fill(mid - 43, 13, 83, 23, " ")
  128.     sky.midR(WIDTH, 20, "&bВаще хз, чё тут запилить,")
  129.     sky.midR(WIDTH, 21, "&bесли есть идеи, напишите :)")
  130.     tech = true
  131. end
  132.  
  133. function ProgrammPanel()
  134.     g.fill(mid - 43, 13, 83, 23, " ")
  135.     tech = false
  136.     sky.midR(WIDTH,13,"&bСписок программ для OpenComputers&r")
  137.     g.setForeground(COLOR3)
  138.     sky.midR(WIDTH,14, "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓")
  139.     sky.midR(WIDTH,15, "┃                       &bНазвание&r                      ┃     &bСтатус&r     ┃  &bРазмер&r  ┃")
  140.     sky.midR(WIDTH,16, "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━┫")
  141.     for i = 1, 9 do
  142.         sky.midR(WIDTH,i+16, "┃                                                     ┃                ┃          ┃")
  143.     end
  144.     sky.midR(WIDTH,26, "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━┛")
  145.     DrawProgs(0)
  146.     prog = true
  147. end
  148.  
  149. function DrawProgs(s)
  150.     sel = s
  151.     for i = 1, #progs do
  152.         g.setForeground(COLOR1)
  153.         g.set(mid-42, i+16, "                                                     ")
  154.         g.set(mid+29, i+16, "          ")
  155.         local name_progs = tostring(progs[i][1][1]) .. tostring(progs[i][1][2])
  156.         if sel ~= i then
  157.             g.set(mid-15-unicode.len(name_progs)/2, i+16, name_progs)      
  158.         else
  159.             g.set(mid-19-unicode.len(name_progs)/2, i+16, ">>> " .. name_progs .. " <<<")      
  160.         end
  161.         if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[i][1][1] .. ".lua")) then
  162.             sky.text(mid + 12, i+16, "&2 Установлено  &r")
  163.             local size = fs.size(shell.getWorkingDirectory() .. "/" .. progs[i][1][1] .. ".lua")
  164.             sky.text(mid + 33 - unicode.len(size)/2, i+16, size .. "B")
  165.         else
  166.             sky.text(mid + 12, i+16, "&8Не установлено&r")
  167.         end
  168.     end
  169.     g.fill(mid - 42, 27, 84, 10, " ")
  170.     if sel ~= 0 then
  171.         if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")) then
  172.             sky.button(mid-21,33,20,3,COLOR1,COLOR2,"Запустить")
  173.             sky.button(mid+1,33,20,3,COLOR1,COLOR2," Обновить ")
  174.         else
  175.             sky.button(mid-10,33,20,3,COLOR1,COLOR2,"Установить")
  176.         end
  177.         g.setForeground(COLOR1)
  178.         sky.midR(WIDTH,28,"Требуемые компоненты:")
  179.         local comp = ""
  180.         for i = 1, #progs[sel][3] do
  181.             comp = comp .. progs[sel][3][i] .. " &0|&r "
  182.         end
  183.         sky.midR(WIDTH,29, "&0|&r " .. comp)
  184.     end
  185. end
  186.  
  187. function Click(w,h)
  188.     g.setForeground(COLOR1)
  189.     if sel ~= 0 then
  190.         if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")) then
  191.             if w>=mid-21 and w<=mid-2 and h>=33 and h<=35 then
  192.                 for i = 1, #progs[sel][3] do
  193.                     if not (component.isAvailable(progs[sel][3][i])) then
  194.                         sky.midR(WIDTH,31,"&6Отсутствует компонент: &4" .. progs[sel][3][i])
  195.                         os.sleep(3)
  196.                         DrawProgs(sel)
  197.                         return
  198.                     end
  199.                 end
  200.                 term.clear()
  201.                 shell.execute(progs[sel][1][1])
  202.                 g.setForeground(COLOR1)
  203.                 print("\nКликни на монитор для перезагрузки")
  204.                 local e = event.pull("touch")
  205.                 print("\nРестарт...")
  206.                 os.sleep(2)
  207.                 shell.execute("reboot")
  208.             elseif w>=mid+1 and w<=mid+20 and h>=33 and h<=35 then
  209.                 fs.remove(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")
  210.                 sky.get(progs[sel][2],progs[sel][1][1] .. ".lua",mid-19,31)
  211.                 sky.midR(WIDTH,31,"                                        ")
  212.                 DrawProgs(sel)
  213.                 return
  214.             end
  215.         else
  216.             if w>=mid-10 and w<=mid+9 and h>=33 and h<=35 then
  217.                 sky.get(progs[sel][2],progs[sel][1][1] .. ".lua",mid-19,31)
  218.                 sky.midR(WIDTH,31,"                                        ")
  219.                 DrawProgs(sel)
  220.                 return
  221.             end
  222.         end
  223.     end
  224.     for i = 1, #progs do
  225.         if w>=mid-42 and w<=mid+38 and h == i + 16 then
  226.             DrawProgs(i)
  227.             return
  228.         end
  229.     end
  230.     DrawProgs(0)
  231. end
  232.  
  233. function Table()
  234.     sky.drawImage(mid - 28,7, shell.getWorkingDirectory() .. "/LogoSkill.lua")
  235.     sky.button(mid - 32,37,20,3,COLOR1,COLOR2,"Проги")
  236.     sky.button(mid - 10,37,20,3,COLOR1,COLOR2,"Войти в шелл")
  237.     sky.button(mid + 12,37,20,3,COLOR1,COLOR2,"Тех.панель")
  238.     sky.button(WIDTH-11,3,7,4,COLOR1,COLOR2,"")
  239.     sky.text(WIDTH-10,4,"&b┌│┐&r")
  240.     sky.text(WIDTH-10,5,"&b└─┘&r")
  241. end
  242.  
  243. function getButtons(w,h)
  244.     if w>=7 and w<= 25 and h>=34 and h<=36 then --Кнопка обновить
  245.         term.clear()
  246.         fs.remove(shell.getWorkingDirectory() .. "/SkyPad.lua")
  247.         fs.remove(shell.getWorkingDirectory() .. "/Programms.lua")
  248.         fs.remove("/lib/sky.lua")
  249.         g.setForeground(COLOR1)
  250.         shell.execute("wget https://www.dropbox.com/s/3bdr406pk8admf1/SkyPad.lua?dl=1 SkyPad.lua")
  251.         shell.execute("wget https://www.dropbox.com/s/vumy87kf8zs6td6/Programms.lua?dl=1")
  252.         shell.execute("wget https://www.dropbox.com/s/8ak2iakw4r4y7td/sky.lua?dl=1 /lib/sky.lua")
  253.         print("\nРестарт...")
  254.         os.sleep(2)
  255.         shell.execute("reboot")
  256.     elseif w>=7 and w<= 25 and h>=37 and h<=39 then --Кнопка Логин
  257.         Login()
  258.     elseif w>=mid-32 and w<= mid-13 and h>=37 and h<=39 then --Кнопка Проги
  259.         ProgrammPanel()
  260.     elseif w>=mid-10 and w<= mid+9 and h>=37 and h<=39 then --Кнопка Войти в шелл
  261.         term.clear()
  262.         g.setForeground(COLOR_SHELL)
  263.         shell.execute("sh")
  264.     elseif w>=mid+12 and w<= mid+31 and h>=37 and h<=39 then --Кнопка Тех.Панель
  265.         TechPanel()
  266.     elseif w>=WIDTH-11 and w<= WIDTH-6 and h>=3 and h<=6 then --Кнопка Офф
  267.         computer.shutdown()
  268.     end
  269. end
  270.  
  271. Login()
  272.  
  273. if fs.exists("/bin/pastebin.lua") then
  274.     shell.execute("rm /bin/pastebin.lua")
  275. end
  276.  
  277. while true do
  278.     local e,_,w,h,_,nick = event.pull("touch")
  279.     if (login) then
  280.         getButtons(w,h)
  281.         if (prog) then
  282.             Click(w,h)
  283.         end
  284.     end
  285. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement