Advertisement
dobreira

OpenAdmins

Oct 28th, 2021 (edited)
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.20 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. local sky = require("sky")
  10. local g = component.gpu
  11. event.shouldInterrupt = function () return false end
  12. --------------------Настройки--------------------
  13. local WIDTH, HEIGHT = 146, 42 --Разрешение моника 146/112 x 42
  14. local COLOR1 = 0x00ffff --Рамка
  15. local COLOR2 = 0x333333 --Цвет кнопок
  16. local UPDATE = 300 --Апдейт отображения информации в сек.
  17. local SCOREBOARDS = {"Admin", "TAdmin", "Global", "Global", "GD", "GM", "STMod", "Dev", "Builder", "Modn",
  18. "Helper2", "Helper1"} --Названия Скорбордов (Создать такие же на серве, либо поменять тут)
  19. local MOD_CHAT_COLOR = {"&8", "&8", "&8", "&8", "&9", "&9", "&3", "&5", "&5", "&6", "&2", "&a"} --Изменение цвета ника в Мод.Чате
  20. local CHANGE_COLOR_NICKNAME = true --Смена цвета ника в мод.чате и листе
  21. local CHANGE_SCOREBOARDS = true --Смена цвета в табе, при наличии скорбордов
  22. -------------------------------------------------
  23. if not (fs.exists(shell.getWorkingDirectory() .. "/AdminsBD.lua")) then
  24.     shell.execute("wget https://www.dropbox.com/s/1e9sre5b00tulj5/AdminsBD.lua?dl=1")
  25. end
  26. print("\nИнициализация...")
  27. os.sleep(2)
  28. print("Запуск программы...")
  29. os.sleep(2)
  30.  
  31. local mid = WIDTH / 2
  32. local sel = nil
  33. local admins
  34. local timer = 0
  35. local stat = {"&0[&4Админ&0] - &0", "&0[&4Тех.Админ&0] - &0", "&0[&4Куратор&0] - &0", "&0[&5Разработчик&0] - &d", "&0[&9Гейм.Дизайнер&0] - &3", "&0[&5Строитель&0] - &d", "&0[&9Гл.Модератор&0] - &3", "&0[&3Ст.Модератор&0] - &3", "&0[&4Модератор&0] - &6", "&0[&2Помощник&0] - &2", "&0[&aСтажёр&0] - &2"}
  36.  
  37. file = io.open(shell.getWorkingDirectory() .. "/AdminsBD.lua", "r")
  38. local reads = file:read(9999999)
  39. if reads ~= nil then
  40.     admins = serial.unserialize("{" .. reads .. "}")
  41. else
  42.     admins = {}
  43. end
  44. file:close()
  45.  
  46. g.setResolution(WIDTH, HEIGHT)
  47. sky.logo("OpenAdmins", COLOR1, COLOR2, WIDTH, HEIGHT)
  48. sky.mid(WIDTH,3, "Администрация сервера")
  49.  
  50. function Save()
  51.     file = io.open(shell.getWorkingDirectory() .. "/AdminsBD.lua", "w")
  52.     local text = ""
  53.     for i = 1, #admins do
  54.         text = text .. "{'"..admins[i][1].."','"..admins[i][2].."','"..admins[i][3].."'},\n"       
  55.     end
  56.     file:write(text)
  57.     file:close()
  58. end
  59.  
  60. function Seen(nick)
  61.     local year, month, day, hour, minute = 0,0,0,0,0
  62.     local c = sky.com("cmi seen " .. nick)
  63.     local _, b = string.find(c, "§8) с §c")
  64.     if (b == nil) then
  65.         return "&4error"
  66.     end
  67.     local text = string.sub(c, b+1, #(c))
  68.     if string.find(text, "лет") ~= nil then
  69.         year = string.sub(text, string.find(text, " лет")-2, string.find(text, " лет")-1)
  70.     end
  71.     if string.find(text, "год") ~= nil then
  72.         year = 1
  73.     end
  74.     if string.find(text, "месяц") ~= nil then
  75.         month = string.sub(text, string.find(text, " месяц")-2, string.find(text, " месяц")-1)
  76.     end
  77.     if string.find(text, "дн") ~= nil then
  78.         day = string.sub(text, string.find(text, " дн")-2, string.find(text, " дн")-1)
  79.     elseif string.find(text, "день") ~= nil then
  80.         day = 1
  81.     end
  82.     if string.find(text, "час") ~= nil then
  83.         hour = string.sub(text, string.find(text, " час")-2, string.find(text, " час")-1)
  84.     end
  85.     if string.find(text, "мин") ~= nil then
  86.         minute = string.sub(text, string.find(text, " мин")-2, string.find(text, " мин")-1)
  87.     end
  88.     local status
  89.     if string.find(c, "Онлайн") ~= nil then
  90.         status = "&2Онлайн"
  91.     else
  92.         status = "&0Оффлайн"
  93.     end
  94.     return status, tonumber(year), tonumber(month), tonumber(day), tonumber(hour), tonumber(minute)
  95. end
  96.  
  97. function Update()
  98.     for i = 1, #admins do
  99.         g.set(mid-45,i+13,"                                     ")
  100.         sky.text(mid-45, i+13, admins[i][1] .. admins[i][2])
  101.         sky.text(mid-8, i+13, admins[i][3] .. "  ")
  102.        
  103.         sky.text(mid+4, i+13, "&6" .. sky.playtime(admins[i][2]) .. "    ")
  104.        
  105.         local status, year, month, day, hour, minute = Seen(admins[i][2])
  106.         g.set(mid+20,i+13,"                       ")
  107.         if status == "&4error" then
  108.             sky.text(mid+20,i+13, status)
  109.         elseif year ~= 0 then
  110.             sky.text(mid+20,i+13, status .. " - " .. year .. " лет " .. month .. " мес. ")
  111.         elseif month ~= 0 then
  112.             sky.text(mid+20,i+13, status .. " - " .. month .. " мес. " .. day .. " дн. ")
  113.         elseif day ~= 0 then
  114.             sky.text(mid+20,i+13, status .. " - " .. day .. " дн. " .. hour .. " ч. ")
  115.         else
  116.             sky.text(mid+20,i+13, status .. " - " .. hour .. " ч. " .. minute .. " мин. ")
  117.         end
  118.     end
  119. end
  120.  
  121. function Sort()
  122.     local buffer = {}
  123.     for i = 1, #stat do
  124.         for j = 1, #admins do
  125.             if stat[i] == admins[j][1] then
  126.                 table.insert(buffer, admins[j])
  127.             end
  128.         end
  129.     end
  130.     admins = buffer
  131. end
  132.  
  133. function Sel()
  134.     for i = 1, #admins do
  135.         sky.text(mid-51,i+13, "   ")
  136.         sky.text(mid+45,i+13, "   ")
  137.         if sel~= nil then
  138.             if sel == admins[i][2] then
  139.                 sky.text(mid-51,i+13, "&b>>>")
  140.                 sky.text(mid+45,i+13, "&b<<<")
  141.             end
  142.         end
  143.     end
  144. end
  145.  
  146. function Draw()
  147.     if sel ~= nil then
  148.         sky.button(mid-44,HEIGHT-4,20,3,COLOR1,COLOR2,"Повысить")
  149.         sky.button(mid-22,HEIGHT-4,20,3,COLOR1,COLOR2,"Понизить")
  150.         sky.button(mid+6,HEIGHT-4,20,3,COLOR1,COLOR2,"Male/Female")
  151.         sky.button(mid+28,HEIGHT-4,20,3,COLOR1,COLOR2,"Удалить")
  152.     else
  153.         g.fill(3,HEIGHT-6, WIDTH-11, 5, " ")
  154.     end
  155. end
  156.  
  157. function Index(array, value)
  158.     for i = 1, #array do
  159.         if value == array[i] then
  160.             return i
  161.         end
  162.     end
  163. end
  164.  
  165. function Click(w,h)
  166.     if sel~= nil then
  167.         local sel_id
  168.         for i = 1, #admins do
  169.             if sel == admins[i][2] then
  170.                 sel_id = i
  171.                 break
  172.             end
  173.         end
  174.         if w>=mid-44 and w<=mid-25 and h>=HEIGHT-4 and h<=HEIGHT-2 then
  175.             index = Index(stat,admins[sel_id][1]) - 1
  176.             if index == 0 then index = 1 end
  177.             admins[sel_id][1] = stat[index]    
  178.             Sort()
  179.             if CHANGE_SCOREBOARDS then
  180.                 sky.com("scoreboard teams join " .. SCOREBOARDS[index] .. " " .. sel)
  181.             end
  182.             if CHANGE_COLOR_NICKNAME then
  183.                 sky.com("nick " .. sel .. " " .. MOD_CHAT_COLOR[index] .. sel)
  184.             end
  185.         elseif w>=mid-22 and w<=mid-3 and h>=HEIGHT-4 and h<=HEIGHT-2 then
  186.             index = Index(stat,admins[sel_id][1]) + 1
  187.             if index == #stat + 1 then index = #stat end
  188.             admins[sel_id][1] = stat[index]
  189.             Sort()
  190.             if CHANGE_SCOREBOARDS then
  191.                 sky.com("scoreboard teams join " .. SCOREBOARDS[index] .. " " .. sel)
  192.             end
  193.             if CHANGE_COLOR_NICKNAME then
  194.                 sky.com("nick " .. sel .. " " .. MOD_CHAT_COLOR[index] .. sel)
  195.             end
  196.         elseif w>=mid+6 and w<=mid+25 and h>=HEIGHT-4 and h<=HEIGHT-2 then
  197.             if admins[sel_id][3] == "&bMale" then
  198.                 admins[sel_id][3] = "&dFemale"
  199.             else
  200.                 admins[sel_id][3] = "&bMale"
  201.             end
  202.         elseif w>=mid+28 and w<=mid+47 and h>=HEIGHT-4 and h<=HEIGHT-2 then
  203.             table.remove(admins, sel_id)
  204.             g.fill(3,13,WIDTH-4,25, " ")
  205.             if CHANGE_SCOREBOARDS then
  206.                 sky.com("scoreboard teams leave " .. sel)
  207.             end
  208.             if CHANGE_COLOR_NICKNAME then
  209.                 sky.com("nick " .. sel .. " " .. sel)
  210.             end
  211.         end
  212.         Update()
  213.         Save()
  214.     end
  215.    
  216.     if w>=WIDTH-8 and w<=WIDTH-4 and h>=HEIGHT-4 and h<=HEIGHT-2 then
  217.         sky.text(mid-44, HEIGHT-6,"&bВведите ник:")
  218.         term.setCursor(mid-30, HEIGHT-6)
  219.         local n = io.read()
  220.         table.insert(admins, {stat[#stat], n, "&bMale"})
  221.         g.set(mid-44, HEIGHT-6,"                                                                                        ")
  222.         Update()
  223.         Save()
  224.         sky.com("scoreboard teams join " .. SCOREBOARDS[#SCOREBOARDS] .. " " .. n)
  225.         sky.com("nick " .. n .. " " .. MOD_CHAT_COLOR[#MOD_CHAT_COLOR] .. n)
  226.     end
  227.    
  228.     if h-13 >= 1 and h-13 <= #admins then
  229.         sel = admins[h-13][2]
  230.         Sel()
  231.     else
  232.         sel = nil
  233.         Sel()
  234.     end
  235.    
  236.     Draw()
  237. end
  238.  
  239. sky.button(WIDTH - 8,HEIGHT-4,5,3,COLOR1,COLOR2,"+")
  240. Update()
  241.  
  242. while true do
  243.     local e,_,w,h,_,nick = event.pull(UPDATE, "touch")
  244.     if e == "touch" then
  245.         Click(w,h)
  246.     end
  247.     if sel == nil then
  248.         Update()
  249.     end
  250. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement