Igor_Timofeev

ГЛАВНАЯ ПРОГА ДЛЯ ЗАПУСКА ДРУГИХ ПРОГ

Nov 20th, 2014
29,253
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ----------------------СТАРТОВЫЕ ПРЕЛЕССССТИ-------------------------
  2.  
  3. local XSize, YSize = term.getSize()
  4. local Selector = 1
  5. local zaderzhka = 0.1
  6. local progressBarWidth = 20
  7. local ColorGray = colors.gray
  8. local ColorLightGray = colors.lightGray
  9. local ColorDownloadBack = colors.gray
  10. local ColorDownloadFront = colors.lightGray
  11.  
  12. -----------СМЕНА ЦВЕТОВОЙ ПАЛИТРЫ, ЕСЛИ МОНИТОР ЧЕРНО-БЕЛЫЙ---------
  13.  
  14. if not term.isColor() then
  15.     ColorGray = colors.black
  16.     ColorLightGray = colors.black
  17.     ColorDownloadBack = colors.white
  18.     ColorDownloadFront = colors.black
  19. end
  20.  
  21. -----------МАССИВ СО ДАННЫМИ О КАЖДОЙ ПРОГРАММЕ НА ПАСТЕБИНЕ--------
  22.  
  23. local Data = {
  24.     --АПИ
  25.     {["paste"]="vjs77QA6",["path"]="System/API/cluster",["type"]="API",["category"]="APIs"},
  26.     {["paste"]="LAKBDeQt",["path"]="System/API/zip",["type"]="API",["category"]="APIs"},
  27.     {["paste"]="TRUJgUme",["path"]="System/API/context",["type"]="API",["category"]="APIs"},
  28.     {["paste"]="Z2kWNQaJ",["path"]="System/API/config",["type"]="API",["category"]="APIs"},
  29.     {["paste"]="6gTj9LxN",["path"]="System/API/image",["type"]="API",["category"]="APIs"},
  30.     {["paste"]="JPYBYVTd",["path"]="System/API/filemanager",["type"]="API",["category"]="APIs"},
  31.     {["paste"]="D1QiSj9L",["path"]="System/API/windows",["type"]="API",["category"]="APIs"},
  32.     {["paste"]="2M3z7Ycf",["path"]="System/API/xml",["type"]="API",["category"]="APIs"},
  33.     {["paste"]="kWNeNPn5",["path"]="System/API/encryptor.cfg",["type"]="API",["category"]="APIs"},
  34.     {["paste"]="CpTj9QHL",["path"]="System/API/encryptor",["type"]="API",["category"]="APIs"},
  35.     {["paste"]="ApGP6e6x",["path"]="System/API/syntax",["type"]="API",["category"]="APIs"},
  36.     --СИСТЕМА
  37.     {["paste"]="1KJcUxPU",["path"]="OS",["type"]="other",["category"]="OS"},
  38.     {["paste"]="HQ5zT3vG",["path"]="System/OS/Icons/default.png",["type"]="other",["category"]="OS"},
  39.     {["paste"]="Be0DWVWX",["path"]="System/OS/Icons/folder.png",["type"]="other",["category"]="OS"},
  40.     {["paste"]="90rS8nxX",["path"]="System/OS/Icons/image.png",["type"]="other",["category"]="OS"},
  41.     {["paste"]="EupZQv59",["path"]="System/OS/Icons/config.png",["type"]="other",["category"]="OS"},
  42.     {["paste"]="PhCccHT4",["path"]="System/OS/Icons/os.png",["type"]="other",["category"]="OS"},
  43.     {["paste"]="eWMNUsb6",["path"]="System/OS/Icons/zip.png",["type"]="other",["category"]="OS"},
  44.     {["paste"]="0rMSM2x2",["path"]="System/OS/Icons/disk.png",["type"]="other",["category"]="OS"},
  45.     --ДОПОЛНЕНИЯ К ПРИЛОЖЕНИЯМ
  46.     {["paste"]="J4tPebM0",["path"]="System/MineCode/logo.png",["type"]="other",["category"]="MineCode IDE"},
  47.     {["paste"]="kAjvzgRN",["path"]="System/MineCode/syntax_colors.cfg",["type"]="other",["category"]="MineCode IDE"},
  48.     {["paste"]="yT9eRQu9",["path"]="System/Photoshop/pslogo.png",["type"]="other",["category"]="Photoshop"},
  49.     --ОБЫЧНЫЕ ПРИЛОЖЕНИЯ
  50.     {["paste"]="qDczAPkV",["path"]="Applications/Cobblestone",["type"]="other",["category"]="applications"},
  51.     {["paste"]="dkvshvvL",["path"]="Applications/RednetSpy",["type"]="other",["category"]="applications"},
  52.     --{["paste"]="hUVMQFGU",["path"]="Applications/RednetSend",["type"]="other",["category"]="applications"},
  53.     --{["paste"]="QqpHrszL",["path"]="Applications/View",["type"]="other",["category"]="applications"},
  54.     {["paste"]="x824frsu",["path"]="Applications/Transfer",["type"]="other",["category"]="applications"},
  55.     {["paste"]="pMSt4K2K",["path"]="Applications/Reactor",["type"]="other",["category"]="applications"},
  56.     {["paste"]="W7ucXtTm",["path"]="Applications/Mine",["type"]="other",["category"]="applications"},
  57.     {["paste"]="Sexqhkdq",["path"]="Applications/Grief",["type"]="other",["category"]="applications"},
  58.     {["paste"]="Bsv3iBiN",["path"]="Applications/CBPaint",["type"]="other",["category"]="applications"},
  59.     {["paste"]="HJg7u7ui",["path"]="Applications/Calibrate",["type"]="other",["category"]="applications"},
  60.     {["paste"]="Xn8THcUC",["path"]="Applications/About",["type"]="other",["category"]="applications"},
  61.     --{["paste"]="uQCTsyd6",["path"]="Applications/MenuDemo1",["type"]="other",["category"]="applications"},
  62.     --{["paste"]="8PL6sQf7",["path"]="Applications/MenuDemo2",["type"]="other",["category"]="applications"},
  63.     --{["paste"]="g0VdnK3X",["path"]="Applications/FileDemo",["type"]="other",["category"]="applications"},
  64.     --НОВЫЕ СУПЕР-ХИТРОЖОПЫЕ ПРИЛОЖЕНИЯ
  65.  
  66.  
  67.     {["paste"]="iDuJCAPS",["icon"]="LVeGQ7pU",["path"]="AirDrop",["type"]="Application",["category"]="applications"},
  68.     {["paste"]="sXj77Y2B",["icon"]="764jWGZX",["path"]="NewsTicker",["type"]="Application",["category"]="applications"},
  69.     {["paste"]="sfY8Hwwb",["icon"]="rc2sddVB",["path"]="Pastebin",["type"]="Application",["category"]="applications"},
  70.     {["paste"]="gt9f7EfZ",["icon"]="sj5uhGUz",["path"]="BSOD",["type"]="Application",["category"]="applications"},
  71.     {["paste"]="D8hSLB2L",["icon"]="DZjpMD68",["path"]="CodeDoor",["type"]="Application",["category"]="applications"},
  72.     {["paste"]="4nFps3sF",["icon"]="PA9HFXnX",["path"]="MineCode",["type"]="Application",["category"]="applications"},
  73.     {["paste"]="CBvTqxRj",["icon"]="hm1jMLhc",["path"]="Photoshop",["type"]="Application",["category"]="applications"},
  74.     {["paste"]="hHum7Qqb",["icon"]="mMhJSh7x",["path"]="Graph",["type"]="Application",["category"]="applications"},
  75. }
  76.  
  77. ----------------------ОБЪЯВЛЕНИЕ ФУНКЦИЙ-----------------------
  78.  
  79. --ЗАГРУЗКА ФАЙЛОВ С ПАСТЕБИНА
  80. local function pastebin(paste,path)
  81.         local file = http.get("http://pastebin.com/raw.php?i="..paste)
  82.     if file then
  83.             file = file.readAll()
  84.             h=fs.open(path,"w")
  85.             h.write(file)
  86.             h.close()
  87.     else
  88.         error("Pastebin server is not aviable.")
  89.     end
  90. end
  91.  
  92. --ЗАГРУЗИТЬ КОНКРЕТНОЕ ПРИЛОЖЕНИЕ
  93. local function downloadApp(pasteApp,pasteIcon,path)
  94.     fs.delete(path..".app")
  95.     pastebin(pasteApp,path..".app/main")
  96.     pastebin(pasteIcon,path..".app/Resources/icon.png")
  97. end
  98.  
  99. --ПРОСТАЯ ЗАЛИВКА ЭКРАНА ЦВЕТОМ
  100. local function clearScreen(color)
  101.     term.setBackgroundColor(color)
  102.     term.clear()
  103. end
  104.  
  105. --ПЛАВНОЕ ВКЛЮЧЕНИЕ ЭКРАНА
  106. local function fadeIn(time)
  107.     clearScreen(ColorGray)
  108.     sleep(time)
  109.     clearScreen(ColorLightGray)
  110.     sleep(time)
  111.     clearScreen(colors.white)
  112.     sleep(time)
  113. end
  114.  
  115. --ПЛАВНОЕ ЗАТУХАНИЕ ЭКРАНА
  116. local function fadeOut(time)
  117.     clearScreen(ColorLightGray)
  118.     sleep(time)
  119.     clearScreen(ColorGray)
  120.     sleep(time)
  121.     clearScreen(colors.black)
  122.     sleep(time)
  123.     term.setCursorPos(1,1)
  124.     term.setTextColor(colors.white)
  125. end
  126.  
  127. --УНИВЕРСАЛЬНАЯ ФУНКЦИЯ ДЛЯ ОТОБРАЖЕНИЯ ТЕКСТА ПО ЦЕНТРУ ЭКРАНА
  128. local function centerText(how,coord,text,textColor,backColor)
  129.     term.setTextColor(textColor)
  130.     term.setBackgroundColor(backColor)
  131.     if how == "xy" then
  132.         term.setCursorPos(math.floor(XSize/2-#text/2),math.floor(YSize/2))
  133.     elseif how == "x" then
  134.         term.setCursorPos(math.floor(XSize/2-#text/2),coord)
  135.     elseif how == "y" then
  136.         term.setCursorPos(coord,math.floor(YSize/2))
  137.     end
  138.     term.write(text)
  139. end
  140.  
  141. --НАРИСОВАТЬ ГОРЗОНТАЛЬНУЮ ЛИНИЮ УКАЗАННОЙ ДЛИНЫ И ЦВЕТА
  142. local function horisontalBar(x,y,width,color)
  143.     for i=x,(x+width-1) do
  144.         paintutils.drawPixel(i,y,color)
  145.     end
  146. end
  147.  
  148. --ОТОБРАЖЕНИЕ ШКАЛЫ ЗАГРУЗКИ С ПРОГРЕССОМ В ПРОЦЕНТАХ
  149. local function progressBar(size,action,percent)
  150.     local doneSize = math.ceil(percent/100*size)
  151.     local startingY = math.floor(YSize/2-1)
  152.     local startingX = math.floor(XSize/2-size/2)
  153.     horisontalBar(1,startingY,XSize,colors.white)
  154.     centerText("x",startingY,"Installing "..action,ColorGray,colors.white)
  155.     horisontalBar(startingX,startingY+2,size,ColorDownloadBack)
  156.     horisontalBar(startingX,startingY+2,doneSize,ColorDownloadFront)
  157.     sleep(zaderzhka)
  158. end
  159.  
  160. --ЗАГРУЗИТЬ ВСЕ ФАЙЛЫ С ПАСТЕБИНА
  161. local function downloadAll()
  162.     clearScreen(colors.white)
  163.     progressBar(progressBarWidth,"started",0)
  164.  
  165.     fs.makeDir("Applications")
  166.     fs.makeDir("System")
  167.     --fs.makeDir("Documents")
  168.     --fs.makeDir("Images")
  169.     --fs.makeDir("Documents/MineCode")
  170.  
  171.     local oneFileIsHowMuchPercent = 1/#Data*100
  172.  
  173.     for i=1,#Data do
  174.         if Data[i]["type"] == "Application" then
  175.             downloadApp(Data[i]["paste"],Data[i]["icon"],Data[i]["path"])
  176.         else
  177.             pastebin(Data[i]["paste"],Data[i]["path"])
  178.         end
  179.         progressBar(progressBarWidth,Data[i]["category"],i*oneFileIsHowMuchPercent)
  180.     end
  181.  
  182.     clearScreen(colors.white)
  183.     centerText("x",math.floor(YSize/2),"Done.",ColorLightGray,colors.white)
  184.     os.pullEvent("key")
  185. end
  186.  
  187. --ЗАГРУЗИТЬ ВСЕ АПИ
  188. local function downloadAPIs()
  189.     for i=1,#Data do
  190.         if Data[i]["type"] == "API" then
  191.             pastebin(Data[i]["paste"],Data[i]["path"])
  192.         end
  193.     end
  194. end
  195.  
  196. --УДАЛИТЬ ВСЕ МОИ ФАЙЛЫ
  197. local function deleteOld()
  198.     fs.delete("Applications")
  199.     fs.delete("Documents")
  200.     fs.delete("Images")
  201.     fs.delete("System")
  202.     fs.delete("OS")
  203.     fs.delete("MineCode")
  204.     fs.delete("startup")
  205.     fs.delete("Startup")
  206. end
  207.  
  208. --УДАЛИТЬ ВООБЩЕ ВСЕ ФАЙЛЫ
  209. local function deleteAll()
  210.     local fileList = fs.list("")
  211.     for i=1,#fileList do
  212.         if not fs.isReadOnly(fileList[i]) then
  213.             fs.delete(fileList[i])
  214.         end
  215.     end
  216. end
  217.  
  218. --НАРИСОВАТЬ СЕЛЕКТОР ДЛЯ ВЫБОРА ПРИ СТАРТЕ ПРОГРАММЫ
  219. local function drawSelection(y,text,id)
  220.     if id == Selector then
  221.         horisontalBar(math.floor(XSize/2-8),y,16,ColorLightGray)
  222.         centerText("x",y,text,colors.white,ColorLightGray)
  223.     else
  224.         horisontalBar(math.floor(XSize/2-8),y,16,colors.white)
  225.         centerText("x",y,text,ColorLightGray,colors.white)
  226.     end
  227. end
  228.  
  229. --ОТОБРАЖЕНИЕ СТАРТОВОГО ИНТЕРФЕЙСА
  230. local function gui()
  231.     local startingY = math.floor(YSize/2-2)
  232.     centerText("x",startingY,"Welcome to ECS installer",ColorGray,colors.white)
  233.  
  234.     drawSelection(startingY+2,"Install OS",1)
  235.     drawSelection(startingY+3,"Clear computer",2)
  236.     drawSelection(startingY+4,"Download API",3)
  237.     drawSelection(startingY+5,"Exit",4)
  238. end
  239.  
  240. -----------------------СТАРТ ПРОГРАММЫ-----------------------
  241.  
  242. fadeIn(0)
  243. gui()
  244.  
  245. while true do
  246.     --ОТСЛЕЖИВАНИЕ КЛАВИШ СТРЕЛОК И ENTER
  247.     local event, scancode = os.pullEvent("key")
  248.     --ПЕРЕМЕСТИТЬСЯ ВЫШЕ
  249.     if scancode == 200 then
  250.         Selector = Selector-1
  251.         if Selector<1 then Selector=1 end
  252.         gui()
  253.     --ПЕРЕМЕСТИТЬСЯ НИЖЕ
  254.     elseif scancode == 208 then
  255.         Selector = Selector+1
  256.         if Selector>4 then Selector=4 end
  257.         gui()
  258.     --СКАЧАТЬ ВСЕ С ПАСТЕБИНА
  259.     elseif scancode == 28 and Selector == 1 then
  260.         --deleteOld()
  261.         downloadAll()
  262.         break
  263.     --ОЧИСТИТЬ КОМП ОТ МОЕГО ГОВНА
  264.     elseif scancode == 28 and Selector == 2 then
  265.         deleteAll()
  266.         clearScreen(colors.white)
  267.         centerText("x",math.floor(YSize/2),"Filesystem was cleared.",ColorLightGray,colors.white)
  268.         local event, scancode = os.pullEvent("key")
  269.         fadeOut(0)
  270.         os.reboot()
  271.         break
  272.     --СКАЧАТЬ ТОЛЬКО АПИ С ПАСТЕБИНА
  273.     elseif scancode == 28 and Selector == 3 then
  274.         fs.delete("System/API")
  275.         clearScreen(colors.white)
  276.         centerText("x",math.floor(YSize/2),"Downloading APIs",ColorLightGray,colors.white)
  277.  
  278.         --[[for i=1,11 do
  279.             pastebin(Data[i]["paste"],Data[i]["path"])
  280.         end]]
  281.         downloadAPIs()
  282.  
  283.         clearScreen(colors.white)
  284.         centerText("x",math.floor(YSize/2),"APIs installed in /System/API",ColorLightGray,colors.white)
  285.         local event, scancode = os.pullEvent("key")
  286.         break
  287.     --ВЫЙТИ ИЗ ПРОГРАММЫ
  288.     elseif scancode == 28 and Selector == 4 then
  289.         break
  290.     end
  291. end
  292.  
  293. fadeOut(0)
  294. term.setCursorPos(1,1)
RAW Paste Data