THEJean_Kevin

stargate spawn

Sep 24th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mon = peripheral.wrap("monitor_0")
  2. sg = peripheral.find("stargate")
  3. mon.setBackgroundColor(colors.black)
  4. mon.clear()
  5. maxEng = 50000
  6. dialling = {}
  7.  
  8.  
  9.  
  10.  
  11. function drawChevrons() --draws cheyvrons on the screen
  12.   x,y = mon.getSize()
  13.   chevX1 = x/3
  14.   chevX2 = x/3*2+1
  15.   chevY1 = y/3-2
  16.   chevY2 = y/3*2 +2
  17.   mon.setBackgroundColor(colors.black)
  18.   for yc = chevY1-2, chevY2-2 do
  19.     for xc = chevX1-2, chevX2-2 do
  20.       mon.setCursorPos(xc, yc)
  21.       mon.write(" ")
  22.     end
  23.   end
  24.   mon.setBackgroundColor(colors.lightGray)
  25.   for i = chevX1+2, chevX2-2 do
  26.     mon.setCursorPos(i,chevY1)
  27.     mon.write(" ")
  28.   end
  29.   for i = chevX1+2, chevX2-2 do
  30.     mon.setCursorPos(i,chevY2)
  31.     mon.write(" ")
  32.   end
  33.   for i = chevY1+2, chevY2-2 do
  34.     mon.setCursorPos(chevX1,i)
  35.     mon.write(" ")
  36.   end
  37.   for i = chevY1+2, chevY2-2 do
  38.     mon.setCursorPos(chevX2, i)
  39.     mon.write(" ")
  40.   end
  41.   chev1pos = {chevX1, chevY2 }
  42.   mon.setBackgroundColor(colors.gray)
  43.   mon.setTextColor(colors.black)
  44.   mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  45.   mon.write(" > ")
  46.   chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  47.   mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  48.   mon.write(" > ")
  49.   chev3pos = {chevX1, chevY1 }
  50.   mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  51.   mon.write(" > ")
  52.   chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  53.   mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  54.   mon.write(" V ")
  55.   chev5pos = {chevX2, chevY1 }
  56.   mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  57.   mon.write(" < ")
  58.   chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  59.   mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  60.   mon.write(" < ")
  61.   chev7pos = {chevX2, chevY2 }
  62.   mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  63.   mon.write(" < ")
  64.   chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  65.   mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  66.   mon.write("   ")
  67. --  chev9pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  68. --  mon.setCursorPos(math.floor(chev8pos[1]-1), chevY1 + ((chevY2 - chevY1) / 2))
  69. --  mon.write(" 9 ")
  70.   mon.setBackgroundColor(colors.black)
  71.   mon.setCursorPos(x/2 - 4, y/2 - 1)
  72.   mon.write("           ")
  73.   mon.setCursorPos(x/2-1, y/2+4)
  74.   mon.write("     ")
  75. end
  76.  
  77. function drawChev( chevInfo )
  78.   mon.setBackgroundColor(colors.gray)
  79.   x,y = mon.getSize()
  80.   chevX1 = x/3
  81.   chevX2 = x/3*2+1
  82.   chevY1 = y/3-2
  83.   chevY2 = y/3*2 +2
  84.   if chevInfo[1] == 1 then
  85.     chev1pos = {chevX1, chevY2 }
  86.     mon.setBackgroundColor(colors.gray)
  87.     mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  88.     mon.write(" "..chevInfo[2].." ")
  89.   elseif chevInfo[1] == 2 then
  90.     chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  91.     mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  92.     mon.write(" "..chevInfo[2].." ")
  93.   elseif chevInfo[1] == 3 then
  94.     chev3pos = {chevX1, chevY1 }
  95.     mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  96.     mon.write(" "..chevInfo[2].." ")
  97.   elseif chevInfo[1] == 4 then
  98.     chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  99.     mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  100.     mon.write(" "..chevInfo[2].." ")
  101.   elseif chevInfo[1] == 5 then
  102.     chev5pos = {chevX2, chevY1 }
  103.     mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  104.     mon.write(" "..chevInfo[2].." ")
  105.   elseif chevInfo[1] == 6 then
  106.     chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  107.     mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  108.     mon.write(" "..chevInfo[2].." ")
  109.   elseif chevInfo[1] == 7 then
  110.     chev7pos = {chevX2, chevY2 }
  111.     mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  112.     mon.write(" "..chevInfo[2].." ")
  113.   elseif chevInfo[1] == 8 then
  114.     chevsave8 = chevInfo[2]
  115.   elseif chevInfo[1] == 9 then
  116.     chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  117.     mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  118.     mon.write(""..chevsave8.." "..chevInfo[2])
  119.   mon.setBackgroundColor(colors.black)
  120. end
  121.  
  122. end
  123.  
  124. function drawSgStatus(status) -- draws stargate status
  125.   if status ~= "Idle" then
  126.   term.setCursorPos(1,2)
  127.   write(status) --needed for sting length because sting.len() won't work with stargateStatus()
  128.   xc, yc = term.getCursorPos()
  129.   term.clear()
  130.   term.setCursorPos(1,2)
  131.   write("> ")
  132.   if xc%2 == 1 then
  133.     xc = xc+1
  134.     even = true
  135.   else
  136.     even = false
  137.   end
  138.   mon.setBackgroundColor(colors.black)
  139.   if status == "Connected" then
  140.     mon.setTextColor(colors.lightBlue)
  141.   elseif status == "Dialling" then
  142.     mon.setTextColor(colors.orange)
  143.   else
  144.     mon.setTextColor(colors.green)
  145.   end
  146.   x,y = mon.getSize()
  147.   mon.setCursorPos((x/2+1) - 6, y/2+2)
  148.   mon.write("          ")
  149.   mon.setCursorPos((x/2+1) - (xc/2-1), y/2+2)
  150.   mon.write(status)
  151.   if even == true then
  152.     mon.write(".")
  153.   end
  154.   end
  155. end
  156.  
  157.  
  158. function drawLocalAddress() -- draws the address stargate being controlled
  159.   x,y = mon.getSize()
  160.   mon.setBackgroundColor(colors.black)
  161.   mon.setTextColor(colors.lightGray)
  162.   mon.setCursorPos(x/2-7, 1)
  163.   mon.write("Stargate Address:")
  164.  
  165. end
  166.  
  167. function drawDial() -- draws the button to access the dialing menu
  168.   x,y = mon.getSize()
  169.   state, int = sg.stargateState()
  170.   for yc = y-3, y-1 do
  171.     for xc = x/2-15, x/2 do
  172.       if state == "Idle" then
  173.         mon.setBackgroundColor(colors.lightGray)
  174.       else
  175.         mon.setBackgroundColor(colors.gray)
  176.       end
  177.       mon.setCursorPos(xc,yc)
  178.       mon.write(" ")
  179.     end
  180.   end
  181.   mon.setCursorPos(x/2-7, y-2)
  182.   mon.setTextColor(colors.black)
  183.   mon.write("List")
  184. end
  185.  
  186. function drawTerm() -- draws the button to terminate the stargate connection to another gate
  187.   x,y = mon.getSize()
  188.   state, int = sg.stargateState()
  189.   for yc = y-3, y-1 do
  190.     for xc = x/2+2, x/2+15 do
  191.       if state == "Connected" or state == "Connecting" or state == "Dialling" then
  192.         mon.setBackgroundColor(colors.lightGray)
  193.       else
  194.         mon.setBackgroundColor(colors.gray)
  195.       end
  196.       mon.setCursorPos(xc,yc)
  197.       mon.write(" ")
  198.     end
  199.   end
  200.   mon.setCursorPos(x/2+3, y-2)
  201.   mon.setTextColor(colors.black)
  202.   mon.write("Eteindre")
  203. end
  204.  
  205.  
  206. function drawHome() -- draws the home screen
  207.   mon.setBackgroundColor(colors.black)
  208.   x,y = mon.getSize()
  209.   mon.clear()
  210.   mon.setCursorPos(1,y)
  211.   mon.setTextColor(colors.gray)
  212.   mon.setBackgroundColor(colors.black)
  213.    
  214.   drawChevrons()
  215.   status, int = sg.stargateState()
  216.   drawSgStatus(tostring(status))
  217.  
  218.  
  219.   drawLocalAddress()
  220.  
  221.   drawDial()
  222.   mon.setCursorBlink(false)
  223.   drawTerm()
  224. end
  225.  
  226. function drawBookmarksPage()
  227.   mon.setBackgroundColor(colors.black)
  228.   mon.clear()
  229.   mon.setTextColor(colors.black)
  230.   x,y = mon.getSize()
  231.   for yc = 1,y-3 do
  232.     if yc%2 == 1 then
  233.       mon.setBackgroundColor(colors.lightBlue)
  234.     else
  235.       mon.setBackgroundColor(colors.lightGray)
  236.     end
  237.     for xc = 1,x do
  238.       mon.setCursorPos(xc, yc)
  239.       mon.write(" ")
  240.     end
  241.   end
  242.   for i= 1,y do
  243.     if i%2 == 1 then
  244.       mon.setBackgroundColor(colors.lightBlue)
  245.     else
  246.       mon.setBackgroundColor(colors.lightGray)
  247.     end
  248.     if fs.exists(tostring(i)) then
  249.       file = fs.open(tostring(i),"r")
  250.       bookmark = textutils.unserialize(file.readAll())
  251.       file.close()
  252.       mon.setCursorPos(1,i)
  253.       for k,v in pairs(bookmark) do
  254.         if k == "name" then
  255.           mon.write(v)
  256.           mon.setCursorPos(x/2, i)
  257.           mon.write(bookmark.address)
  258.           mon.setCursorPos(x,i)
  259.         end
  260.       end
  261.     end
  262.   end
  263.   mon.setCursorPos(x/2, y-1)
  264.   mon.setBackgroundColor(colors.black)
  265.   mon.setTextColor(colors.white)
  266.   mon.write("BACK")
  267. end
  268.  
  269.  
  270. function inputPage(type)
  271.   mon.clear()
  272.   term.redirect(mon)
  273.   term.setBackgroundColor(colors.lightGray)
  274.   term.clear()
  275.   x,y = term.getSize()
  276.   term.setCursorPos(x/2-8, y/2-2)
  277.   print("Set an address name")
  278.   term.setCursorPos(x/2 - 4, y/2)
  279.   print("         ")
  280.   term.setCursorPos(x/2 - 4, y/2)
  281.   nameInput = read()
  282.   addressInput = "nil"
  283.   term.setBackgroundColor(colors.lightGray)
  284.   term.clear()
  285.   term.setCursorPos(x/2-9, y/2-4)
  286.   print("Enter Stargate address")
  287.   if type == "secEntry" then
  288.     term.setCursorPos(x/2-10, y/2-2)
  289.     print("DO NOT ENTER ANY HYPHONS")
  290.   end
  291.   term.setBackgroundColor(colors.black)
  292.   term.setCursorPos(x/2 - 5, y/2)
  293.   print("           ")
  294.   term.setCursorPos(x/2 - 5, y/2)
  295.   addressInput = string.upper(read())
  296.   newGate ={name = nameInput, address = addressInput}
  297.   term.redirect(term.native())
  298.   return newGate
  299. end
  300.  
  301. function drawRemoteAddress(name)
  302.   mon.setBackgroundColor(colors.black)
  303.   mon.setTextColor(colors.blue)
  304.   x,y = mon.getSize()
  305.   mon.setCursorPos((x/2+1) - string.len(name)/2, y/2-2)
  306.   mon.write(name)
  307. end
  308.  
  309.  
  310.  
  311.  
  312. if fs.exists("currentSec") then -- checks to see if there's list of gates stored for security reasons
  313.   file = fs.open("currentSec", "r")
  314.   currentSec = file.readAll()
  315.   file.close()
  316. else
  317.   currentSec = "NONE"
  318. end
  319. mon.setTextScale(1)
  320. drawHome()
  321. while true do
  322.   event, param1, param2, param3 = os.pullEvent()
  323.   if event == "monitor_touch" then
  324.     x,y = mon.getSize()
  325.     if param2 > x/2-15 and param2 <= x/2 and param3 >= y-3 and param3 <= y-1 then -- Click has opened dial menu
  326.       status, int = sg.stargateState()
  327.         if status == "Idle" then
  328.             while true do
  329.                 drawBookmarksPage()
  330.                 event, param1, param2, param3 = os.pullEvent()
  331.                 if event == "monitor_touch" then
  332.                     if param3 >= y-2 then -- user clicked back
  333.                         drawHome()
  334.                         break
  335.                        
  336.                        
  337.                     else -- user has clicked on a bookmark
  338.                         if fs.exists(tostring(param3)) then
  339.                           file = fs.open(tostring(param3), "r")
  340.                           gateData = textutils.unserialize(file.readAll()) -- GATE DATA VARIABLE!!!
  341.                           file.close()
  342.                           drawHome()
  343.                           for k,v in pairs(gateData) do
  344.                             if k == "address" then
  345.                               ok, result = pcall(sg.dial, v)
  346.                               if ok then
  347.                                 chat.say("Attention, ne reste pas en face de la porte quand elle s'ouvre ou tu risque de mourrir") 
  348.                            
  349.                                    
  350.                                        
  351.                                     drawRemoteAddress(gateData.name)
  352.                                 status, int = sg.stargateState()
  353.                                 drawSgStatus(status)                               
  354.                               else
  355.                                 drawSgStatus("Error")      
  356.                               end
  357.                            
  358.                                
  359.                             end
  360.                            
  361.                           end
  362.                            
  363.                        
  364.                          
  365.                         break
  366.                         end
  367.                     end
  368.                 else
  369.                   drawHome()
  370.                   break
  371.                 end
  372.             end
  373.         end
  374.        
  375.      
  376.    
  377.     elseif param2 > x/2+2 and param2 <= x/2+15 and param3 >= y-3 and param3 <= y-1 then -- user clicked TERM
  378.       ok, result = pcall(sg.disconnect)
  379.       drawChevrons()
  380.       drawRemoteAddress(" ")
  381.     end
  382.    
  383.   elseif event == "sgDialIn" then
  384.     mon.setTextColor(colors.orange)
  385.    
  386.     if fs.exists("currentSec") then
  387.       file = fs.open("currentSec", "r")
  388.       currentSec = file.readAll()
  389.       file.close()
  390.     end
  391.     if fs.exists("secList") then
  392.       file = fs.open("secList", "r")
  393.       secList = textutils.unserialize(file.readAll())
  394.       for k,v in pairs(secList) do
  395.         address = v.address
  396.         if string.sub(v.address,1,7) == param2 or v.address == param2 then
  397.          
  398.           secGate = true
  399.         end
  400.       end
  401.     end
  402.    
  403.    
  404.    
  405.   elseif event == "sgStargateStateChange" or "sgChevronEngaged" then
  406.     drawDial()
  407.    
  408.     drawTerm()
  409.     status, int = sg.stargateState()
  410.     drawSgStatus(tostring(status))
  411.     if status == "idle" then
  412.       isConnected = false
  413.     else
  414.       isConnected = true
  415.     end
  416.     if event == "sgChevronEngaged" then
  417.       mon.setTextColor(colors.orange)
  418.       drawChev({param2, param3})
  419.       if param2 == 1 then
  420.         dialling = {}
  421.       end
  422.       table.insert(dialling, param2, param3)
  423.       --drawRemoteAddress()
  424.      
  425.     elseif param2 == "Idle" then
  426.      
  427.       drawChevrons()
  428.     elseif param2 == "Connected" then
  429.    
  430.       mon.setTextColor(colors.lightBlue)
  431.       for k,v in pairs(dialling) do
  432.         drawChev({k,v})
  433.       end
  434.       sg.sendMessage(sg.irisState())
  435.     end
  436.   end
  437.   end
Advertisement
Add Comment
Please, Sign In to add comment