Etsukazu_Aoi

Untitled

Apr 18th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- **************************************************************** --
  2. --  local variables
  3. -- **************************************************************** --
  4.  
  5. local w,h = term.getSize() -- 51, 19
  6. local select = 1
  7. local verNum = 1.01
  8. local m,s, timeUpdated = "00","00", false
  9. local logs = {}
  10. local firstTime = not fs.exists('STARGATE')
  11. local gates = { }
  12.  
  13. -- **************************************************************** --
  14. --  Download and load apis, files, and directories
  15. -- **************************************************************** --
  16.  
  17. if not http then
  18.     print("Stargate DHD requires http API")
  19.     print("Set enableAPI_http to true in ComputerCraft.cfg")
  20.     return
  21. end
  22.  
  23. function Initialize()
  24.     if not fs.exists("dropbox") then
  25.         shell.run('pastebin get L9iRRjg6 dropbox')
  26.         term.clear() -- **** need to fix GUI prob **** --
  27.         table.insert(logs, 'Downloaded Dropbox Downloader')
  28.         rollingLogs()
  29.     end
  30.     if not fs.exists('STARGATE') then
  31.         fs.makeDir('STARGATE')
  32.         table.insert(logs, 'Creating directory STARGATE')
  33.         rollingLogs()
  34.     end
  35.     if not fs.exists('STARGATE/apis') then
  36.         fs.makeDir('STARGATE/apis')
  37.         table.insert(logs, 'Creating directory apis')
  38.         rollingLogs()
  39.     end
  40.     if not fs.exists('STARGATE/Settings') then
  41.         fs.makeDir('STARGATE/Settings')
  42.         table.insert(logs, 'Creating directory Settings')
  43.         rollingLogs()
  44.     end
  45.     if not fs.exists("STARGATE/apis/wrap") then
  46.         shell.run("dropbox Simple%20Wrap.lua CC%20Porgrams 126735377 STARGATE/apis/wrap")
  47.         table.insert(logs, 'Downloading api: Simple Wrap.lua from dropbox')
  48.         rollingLogs()
  49.     end
  50.     if not fs.exists("STARGATE/apis/Downloader") then
  51.         shell.run("dropbox Downloader.lua CC%20Porgrams 126735377 STARGATE/apis/Downloader")
  52.         table.insert(logs, 'Downloading api: Downloader.lua from dropbox')
  53.         rollingLogs()
  54.     end
  55.     os.loadAPI("STARGATE/apis/wrap")
  56.     table.insert(logs, 'Loading api: wrap')
  57.     rollingLogs()
  58.     os.loadAPI("STARGATE/apis/Downloader")
  59.     table.insert(logs, 'Loading api: Downloader')
  60.     rollingLogs()
  61.     if not fs.exists('STARGATE/Settings/Timing') then
  62.         local f = fs.open('STARGATE/Settings/Timing', 'w')
  63.             f.writeLine(14)
  64.         f.close()
  65.         table.insert(logs, 'Setting cumulative update time to 15 min')
  66.         rollingLogs()      
  67.     end
  68.     if not fs.exists('STARGATE/Settings/onlineInfo') then
  69.         local f = fs.open('STARGATE/Settings/onlineInfo', 'w')
  70.             f.writeLine("Dropbox or Pastebin")
  71.             f.writeLine("link or code")
  72.         f.close()
  73.         table.insert(logs, 'Setting online cumulative update location')
  74.         rollingLogs()  
  75.     end
  76.     if not fs.exists('STARGATE/Settings/AddressList') then
  77.         local f = fs.open('STARGATE/Settings/AddressList', 'w')
  78.             f.writeLine("Stargate_Address_List = {")
  79.             f.writeLine("}")
  80.         f.close()
  81.         table.insert(logs, 'Making blank Address List')
  82.         rollingLogs()  
  83.     end
  84. end
  85.    
  86. -- **************************************************************** --
  87. --  Some Functions
  88. -- **************************************************************** --
  89.  
  90. function dial(address)
  91.     local gate = wrap.attach("Abstract Bus Adapter")
  92.     if gate then
  93.         gate.sendPacket("FFFF", "action: dial", "address: "..address)
  94.     end
  95. end
  96.  
  97. function disconnect()
  98.     local gate = wrap.attach("Abstract Bus Adapter")
  99.     if gate then
  100.         gate.sendPacket("FFFF", "action: disconnect")
  101.     end
  102. end
  103.  
  104. function settings_Timing(newTime)
  105.     if newTime then
  106.         local f = fs.open('STARGATE/Settings/Timing', 'w')
  107.             f.writeLine(newTime)
  108.         f.close()
  109.         m, s, timeUpdated = newTime, "00", true
  110.     else
  111.         local f = fs.open('STARGATE/Settings/Timing', 'r')
  112.             local Time = f.readLine()
  113.         f.close()
  114.         return math.floor(Time)
  115.     end
  116. end
  117.  
  118. function settings_OnlineInfo(Dropbox_Pastebin, info)
  119.     if info then
  120.         local f = fs.open('STARGATE/Settings/onlineInfo', 'w')
  121.             if Dropbox_Pastebin == "Dropbox" and string.find(info,"www.") then
  122.                 local str = strsplit("www.", info)
  123.                 info = str[1].."dl."..str[2]
  124.             end    
  125.             f.writeLine(Dropbox_Pastebin)
  126.             f.writeLine(info)
  127.         f.close()
  128.     else
  129.         local f = fs.open('STARGATE/Settings/onlineInfo', 'r')
  130.             local Paste_Drop = f.readLine()
  131.             local location = f.readLine()
  132.         f.close()
  133.         return Paste_Drop, location
  134.     end
  135. end
  136.  
  137. function updateAdressList()
  138.     os.unloadAPI("STARGATE/Settings/AddressList")
  139.     local name, info = settings_OnlineInfo()
  140.     Downloader.get(name, info)
  141.     os.loadAPI("STARGATE/Settings/AddressList")
  142.     if AddressList.Stargate_Address_List then
  143.         gates = AddressList.Stargate_Address_List
  144.     end
  145.     updateGateMenu()
  146. end
  147.  
  148. function updateSG_DHD()
  149.     local file = http.get("https://dl.dropboxusercontent.com/u/126735377/CC%20Porgrams/Stargate%20DHD.lua")
  150.     local program = file.readAll()
  151.     file.close()
  152.     if not string.find(program,"local verNum = "..verNum) then
  153.         term.clear()
  154.         drawHeaderFooter()
  155.         printCentered("O----------------O", 7, 1)
  156.         printCentered("O----------------O", 9, 1)
  157.         local update = {".   ","..  ","... ","...."}
  158.         for i=1,#update do
  159.             printCentered("|  updating"..update[i].."  |", 8, 1)
  160.             sleep(1)
  161.         end
  162.         local dir = shell.getRunningProgram()
  163.         fs.delete(dir)
  164.         local f = fs.open(dir, "w")
  165.             f.write(program)
  166.         f.close()
  167.         shell.run(dir)
  168.     end
  169. end
  170.  
  171. function strsplit( pat, str )
  172.     local t = {}
  173.     local fpat = "(.-)" .. pat
  174.     local last_end = 1
  175.     local s, e, cap = str:find(fpat, 1)
  176.     while s do
  177.         if s ~= 1 or cap ~= "" then
  178.             table.insert(t,cap)
  179.         end
  180.         last_end = e+1
  181.         s, e, cap = str:find(fpat, last_end)
  182.     end
  183.     if last_end <= #str then
  184.         cap = str:sub(last_end)
  185.         table.insert(t, cap)
  186.     end
  187.     return t
  188. end
  189.  
  190. function rollingLogs()
  191.     if firstTime then
  192.         term.clear()
  193.         drawHeaderFooter()
  194.         printCentered("Doing some things...",8, 1)
  195.         printCentered("O"..string.rep("-", w-6).."O",9, 1)
  196.         for i=1, 3 do
  197.             printCentered("|"..string.rep(" ", w-6).."|",9+i, 1)
  198.         end
  199.         printCentered("O"..string.rep("-", w-6).."O",13, 1)
  200.         while #logs > 3 do
  201.             table.remove(logs, 1)
  202.         end
  203.         for i=1, #logs do
  204.             printCentered(logs[i], 9+i, 1)
  205.         end
  206.         sleep(1)
  207.     end
  208. end
  209.  
  210. -- **************************************************************** --
  211. --  GUI
  212. -- **************************************************************** --
  213.  
  214. --Some draw functions to get us started
  215. function printCentered(str, ypos, offset)
  216.     if not offset then offset = 0 end
  217.     term.setCursorPos(w/2 - #str/2+offset, ypos)
  218.     term.write(str)
  219. end
  220.  
  221. function printRight(str, ypos)
  222.     term.setCursorPos(w - #str, ypos)
  223.     term.write(str)
  224. end
  225.  
  226. function printCollumRow(str, ypos, num, offset)
  227.     if num == 1 then
  228.         term.setCursorPos(1+offset,ypos)
  229.         term.write(str)
  230.     elseif num == 2 then
  231.         term.setCursorPos(w/2 - #str/2, ypos)
  232.         term.write(str)
  233.     elseif num == 3 then
  234.         term.setCursorPos((w - #str)-offset+1, ypos)
  235.         term.write(str)
  236.     end
  237. end
  238.  
  239. --draw menu functions
  240. function drawHeaderFooter()
  241.     printCentered("O"..string.rep("-", w-2).."O", 1, 1)
  242.     printCentered("O  Stargate D.H.D.  O", 1)
  243.     printCentered("| Cumulative Update |", 2)
  244.     printCentered("O-----< "..m..":"..s.." >-----O", 3)
  245.     printCentered("O"..string.rep("-", w-2).."O", h-1, 1)
  246.     for i=2, h-2 do
  247.         term.setCursorPos(1,i)
  248.         term.write("|")
  249.         term.setCursorPos(w,i)
  250.         term.write("|")    
  251.     end
  252.     term.setCursorPos(2,h)
  253.     term.write("By: PaintPauller") 
  254.     printRight("Version: "..verNum, h)
  255. end
  256.  
  257. function drawMain()
  258.     local toPrint = { "Dial Stargate", "Disconnect Stargate", "Settings", "Force Update"}
  259.     local num = 1
  260.     for i=6, #toPrint*4, 3 do
  261.         printCentered(toPrint[num], i)
  262.         if select == num then
  263.             printCentered("O"..string.rep("-", #toPrint[num]).."O", i+1)
  264.         end
  265.         num = num + 1
  266.     end
  267.     printRight("Quit", h-2)
  268.     if select == #toPrint+1 then
  269.         printRight("> Quit <", h-2)
  270.     end
  271. end
  272.  
  273. function drawDiall()
  274.     local collum = 1
  275.     local row = 5
  276.     for  i=1, #gates do
  277.         if i>18 then break end
  278.         printCollumRow(gates[i].name, row, collum, 2)
  279.         if select == i then
  280.             printCollumRow("O"..string.rep("-", #gates[i].name).."O", row+1, collum, 1)
  281.         end    
  282.         row = row + 2
  283.         if row >= 16 then
  284.             row = 5
  285.             collum = collum + 1
  286.         end
  287.     end
  288.     printRight("Back", h-2)
  289.     if select == #gates+1 or select == 19 then
  290.         printRight("> Back <", h-2)
  291.     end
  292. end
  293.  
  294. function drawSettingsEditor()
  295.     printCentered("O"..string.rep("-", 42).."O", h-6, 1)
  296.     printCentered("|"..string.rep(" ", 42).."|", h-5, 1)
  297.     printCentered("O"..string.rep("-", 42).."O", h-4, 1)
  298. end
  299.  
  300. function drawSettings()
  301.     local name, location = settings_OnlineInfo()
  302.     if #location > 31 then
  303.         location = string.sub(location, 1, 30).."..."
  304.     end
  305.     printCollumRow("Change Cumulative Update Timing", 5, 1, 3)
  306.     printCollumRow("Change Online Location", 8, 1, 3)
  307.    
  308.     printCollumRow("Minutes: "..settings_Timing()+1, 6, 1, 5)
  309.     printCollumRow(name, 9, 1, 5)
  310.     printCollumRow("Location: "..location, 10, 1, 5)
  311.     printRight("Back", h-2)
  312.     settings_OnlineInfo(Dropbox_Pastebin, info)
  313.     if select == 1 then
  314.         printCollumRow("> Minutes: "..settings_Timing()+1, 6, 1, 3)
  315.     elseif select == 2 then
  316.         printCollumRow("> "..name, 9, 1, 3)
  317.     elseif select == 3 then
  318.         printCollumRow("> Location: "..location, 10, 1, 3)
  319.     elseif select == 4 then
  320.         printRight("> Back <", h-2)
  321.     end
  322. end
  323.  
  324. -- Menu state
  325. local menustate = "Main"
  326. local menuOpt = {
  327.     ['Main'] = {
  328.         options = { "Dial a Stargate", "Disconnect Stargate", "Settings", "Force Update", "Quit" },
  329.         draw = drawMain
  330.     },
  331.     ["Dial a Stargate"] = {
  332.         options = { }, --filled in later
  333.         draw = drawDiall
  334.     },
  335.     ['Settings'] = {
  336.         options = { "Minute", "DropBox_Pastebin", "Online Location", "Main" },
  337.         draw = drawSettings
  338.     },
  339. }
  340.  
  341. function updateGateMenu()
  342.     menuOpt["Dial a Stargate"].options = { }
  343.     for i=1, #gates do
  344.         if i>18 then break end
  345.         table.insert(menuOpt["Dial a Stargate"].options, gates[i].name)
  346.     end
  347.     table.insert(menuOpt["Dial a Stargate"].options, 'Main')
  348. end
  349. updateGateMenu()
  350.  
  351. -- Run
  352. function timer()
  353.     while true do
  354.         updateAdressList()
  355.         for mc=settings_Timing(), 0, -1 do
  356.             for sc =60, 0, -1 do
  357.                 m = mc
  358.                 s = sc
  359.                 if s < 10 then s = tostring("0"..s) end
  360.                 if m < 10 then m = tostring("0"..m) end
  361.                 local old_x, old_y = term.getCursorPos()
  362.                 printCentered("O-----< "..m..":"..s.." >-----O", 3)
  363.                 term.setCursorPos(old_x, old_y)
  364.                 if not timeUpdated then sleep(1) end
  365.             end
  366.             if timeUpdated then sleep(.00001) end
  367.         end
  368.         timeUpdated = false
  369.     end
  370. end
  371.  
  372. function runMenu()
  373.     while true do
  374.         local acted = false
  375.         term.clear()
  376.         drawHeaderFooter()
  377.         menuOpt[menustate].draw()
  378.        
  379.     --[[ -- Debug Start --
  380.         term.setCursorPos(1,h)
  381.         term.clearLine()
  382.         printRight(menustate, h)
  383.         term.setCursorPos(2,h)
  384.         term.write(tostring(menuOpt[menustate].options[select])..": "..select)
  385.     --]] -- Debug End --
  386.    
  387.         local id, key = os.pullEvent("key")
  388.         -- 203: left, 205: right, 200: up, 208: down, 28: enter
  389.        
  390.         if key == 200 and select > 1 then
  391.             select = select-1
  392.         elseif key == 200 and select == 1 then
  393.             select = #menuOpt[menustate].options
  394.         elseif key == 208 and select < #menuOpt[menustate].options then
  395.             select = select+1
  396.         elseif key == 208 and select == #menuOpt[menustate].options then
  397.             select = 1
  398.         elseif key == 203 and select == 19 and menustate == "Dial a Stargate" then
  399.             select = 1
  400.         elseif key == 203 and select < 7 and menustate == "Dial a Stargate" then
  401.             select = select+12
  402.             if select > #menuOpt[menustate].options then select = #menuOpt[menustate].options end
  403.         elseif key == 203 and select > 6 and menustate == "Dial a Stargate" then
  404.             select = select-6
  405.         elseif key == 205 and select == 19 and menustate == "Dial a Stargate" then
  406.             select = 1         
  407.         elseif key == 205 and select < 13 and menustate == "Dial a Stargate" then
  408.             select = select+6
  409.             if select > #menuOpt[menustate].options then select = #menuOpt[menustate].options end
  410.         elseif key == 205 and select > 12 and menustate == "Dial a Stargate" then
  411.             select = select-12
  412.         elseif key == 28 then
  413.             if menuOpt[menustate].options[select] == "Quit" then break end
  414.             if menuOpt[menustate].options[select] == "Force Update" then
  415.                 updateAdressList()
  416.                 acted = true
  417.             end disconnect()
  418.             if menuOpt[menustate].options[select] == "Disconnect Stargate" and not acted then
  419.                 disconnect()
  420.                 acted = true
  421.             end        
  422.             for name, info in pairs(menuOpt) do
  423.                 if menuOpt[menustate].options[select] == name and not acted then
  424.                     menustate = menuOpt[menustate].options[select]
  425.                     select = 1
  426.                     acted = true
  427.                 end
  428.             end
  429.             if menustate == "Dial a Stargate" and not acted then
  430.                 dial(gates[select].address)
  431.                 sleep(1)
  432.                 menustate = "Main"
  433.                 acted = true
  434.                
  435.             end
  436.             if menustate == "Settings" and not acted then
  437.                 if select == 1 then
  438.                     drawSettingsEditor()               
  439.                     term.setCursorPos(5,h-5)
  440.                     local command = tostring(read())
  441.                     local Ncommand = tonumber(command)
  442.                     if type(Ncommand) == 'number' and Ncommand <= 99 and Ncommand >= 1 then
  443.                         term.setCursorPos(5,h-5)
  444.                         term.write('Updateing...')
  445.                         settings_Timing(math.floor(Ncommand-1))
  446.                         while timeUpdated do sleep(.00001) end
  447.                     else
  448.                         term.setCursorPos(5,h-5)
  449.                         term.write('Invalid number!')
  450.                         sleep(1)
  451.                     end
  452.                     acted = true
  453.                 elseif select == 2 then
  454.                     local name, location = settings_OnlineInfo()
  455.                     if name == "Dropbox" then
  456.                         settings_OnlineInfo("Pastebin", location)
  457.                     else
  458.                         settings_OnlineInfo("Dropbox", location)
  459.                     end
  460.                     acted = true
  461.                 elseif select == 3 then
  462.                     local name, location = settings_OnlineInfo()
  463.                     drawSettingsEditor()
  464.                     term.setCursorPos(5,h-7)
  465.                     if name == "Dropbox" then
  466.                         term.write("Paste the Dropbox link below.")
  467.                     elseif name == "Pastebin" then
  468.                         term.write("Paste the Pastebin code below.")
  469.                     end
  470.                     term.setCursorPos(5,h-5)
  471.                     local command = tostring(read())
  472.                     drawSettings()
  473.                     drawSettingsEditor()
  474.                     term.setCursorPos(5,h-5)
  475.                     term.write('Updateing...')                 
  476.                     settings_OnlineInfo(name, command)
  477.                     sleep(1)
  478.                     updateAdressList()
  479.                     acted = true
  480.                 end
  481.             end
  482.         end
  483.     end
  484. end
  485.  
  486. Initialize()
  487. updateSG_DHD()
  488. if settings_OnlineInfo() == "Dropbox or Pastebin" then
  489.     menustate = "Settings"
  490.     select = 2
  491. end
  492. parallel.waitForAny( timer, runMenu )
  493. term.clear()
  494. term.setCursorPos(1,1)
Add Comment
Please, Sign In to add comment