HellFire13

Gmod E2 - Multi Auto Door (MAD)

Dec 17th, 2015
934
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.58 KB | None | 0 0
  1. @name MAD (Multi Auto Door)
  2. @inputs
  3. @outputs Fade1 Fade2 Fade3 Fade4
  4. @persist  Player:entity [A T Allowed Commands Doors LT Timers Channels State ChID]:table I C Busy Fade Channel:string Buffer Door_Delay PlaySound
  5. @trigger
  6. # Hell Fire
  7.  
  8. # Fusion Multi Door - by Hell Fire V1.5
  9. # 1.3 - fixed indexed functions
  10. # 1.4 - Changed find player method
  11. # 1.5 - Added command "#remove <player>"
  12.  
  13. interval(100)
  14.  
  15. if(first()|duped()) {
  16.    
  17.    
  18.           # Editable variables #
  19.    
  20.     Close_Delay = 1 # Delay time in seconds
  21.     PlaySound = 0 # change to 1 to play sounds
  22.    
  23.     # Do not edit anything below this line unless you know what your doing.
  24.    
  25.  
  26.     runOnChat(1)
  27.     Search_status = 1
  28.     T = table()
  29.     findExcludeClass("*")
  30.     findIncludeClass("prop_physics")
  31.     findInSphere(owner():pos(),5000)
  32.     A = findToTable()
  33.     print("Please wait while I look for your fading door(s).")
  34.  
  35.     Allowed[owner():toString(),string] = owner():steamID()
  36.     Commands["#add",string] = "addPlayer"
  37.     Commands["#remove",string] = "removePlayer"
  38.     Commands["#clear",string] = "clearList"
  39.     Channels = table(0,0,0,0) ## 4 Channels
  40.     ## Closes a door and disconnects.
  41.     function void rmWire(Args:string) {
  42.         if(Args == "Fade1") {
  43.             Fade1 = 0
  44.         }
  45.         elseif(Args == "Fade2") {
  46.             Fade2 = 0
  47.         }
  48.         elseif(Args == "Fade3") {
  49.             Fade3 = 0
  50.         }
  51.         elseif(Args == "Fade4") {
  52.             Fade4 = 0
  53.         }
  54.         T[I,entity]:deleteWire("Fade")
  55.     }
  56.     # connects then opens a door.
  57.     function void broadcast(Args:string) {
  58.         T[I,entity]:createWire(entity(),"Fade",Args)
  59.         if(Args == "Fade1") {
  60.             Fade1 = 1
  61.         }
  62.         elseif(Args == "Fade2") {
  63.             Fade2 = 1
  64.         }
  65.         elseif(Args == "Fade3") {
  66.             Fade3 = 1
  67.         }
  68.         elseif(Args == "Fade4") {
  69.             Fade4 = 1
  70.         }
  71.     }
  72.    
  73.     # Indexed Said Functions
  74.     function number isAllowed(Ply:entity) {
  75.         if(Allowed:exists(Ply:toString())) {
  76.             return 1
  77.         }  
  78.         return 0
  79.     }
  80.    
  81.     function void addPlayer(Args:string) {
  82.         Player = findPlayerByName(Args)
  83.         if(!isAllowed(Player)&Player:isPlayer()) {
  84.             Allowed[Player:toString(),string] = Player:steamID()
  85.             print(Player:name()+" has been added!")
  86.         }
  87.     }    
  88.    
  89.     function void removePlayer(Args:string) {
  90.         Player = findPlayerByName(Args)
  91.         if(Allowed:exists(Player:toString())&Player:isPlayer())
  92.         {
  93.             Allowed:remove(Player:toString())
  94.             print(Player:name() + " was removed!")
  95.         }
  96.     }    
  97.    
  98.     function void clearList(Args:string) {
  99.         Allowed = table()
  100.         Allowed[owner():toString(),string] = owner():steamID()
  101.         print("White list has been cleared!")
  102.     }
  103. }
  104.  
  105. if(Search_status) {
  106.     ## Search for doors first then begin main script.
  107.     I++
  108.      if(A[I,entity]:getWireInputs():concat():find("Fade")) {
  109.         C++
  110.         T[C,entity] = A[I,entity]
  111.         Doors[C,string] = "standby"
  112.     }
  113.     if(I>=A:count()) {
  114.         Search_status = 0
  115.         I = 0
  116.         print(C+" Door(s) found.")
  117.     }
  118. }
  119. # main script.
  120. else
  121. {
  122.     I++
  123.     findExcludeClass("prop_physics")
  124.     findIncludeClass("player")
  125.     findInSphere(T[I,entity]:pos(),50) # here we check each door for a nearby player.
  126.     Player = find()
  127.  
  128.     if(LT[I,number]<= curtime()&Doors[I,string]!="standby")
  129.     {
  130.         rmWire(Doors[I,string])
  131.         Doors[I,string] = "standby"
  132.         Channels[ChID[I,number],number] = 0
  133.         soundPurge()
  134.     }
  135.  
  136.     if(isAllowed(Player))
  137.     {
  138.         ##Check door state.
  139.             if(Doors[I,string]=="standby") {
  140.             for(I=1,Channels:count()) {
  141.                 if(!Channels[I,number]) {
  142.                     Channels[I,number] = 1
  143.                     ID = I
  144.                     Channel = "Fade"+I:toString()
  145.                     break
  146.                 }
  147.             }
  148.             if(PlaySound) { T[I,entity]:soundPlay(Channel,0,"buttons/bell1.wav") }
  149.             ChID[I,number] = ID
  150.             LT[I,number] = curtime()+Close_Delay
  151.             Doors[I,string] = Channel
  152.             broadcast(Channel) # open da door
  153.             State["LT",table] = LT
  154.         }
  155.     }
  156.  
  157.     if(I>=T:count()) {
  158.         I = 0
  159.     }
  160.  
  161.     if(chatClk(owner())) {
  162.         Str = owner():lastSaid():lower():explode(" ")
  163.         if(Commands:exists(Str[1,string])) {
  164.             hideChat(1)
  165.             Commands[Str[1,string],string](Str[2,string])
  166.         }
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment