Advertisement
Guest User

kcs.lua

a guest
Aug 27th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. if (SERVER) then
  2. CreateConVar( "sbox_maxkcs", 100 )
  3. end
  4.  
  5. TOOL.Category = "Construction"
  6. TOOL.Name = "Keycard Scanner"
  7. TOOL.Command = nil
  8.  
  9. TOOL.ClientConVar['weld'] = '1'
  10. TOOL.ClientConVar['freeze'] = '1'
  11.  
  12. TOOL.ClientConVar['length_granted'] = '0.1'
  13. TOOL.ClientConVar['length_denied'] = '0.1'
  14.  
  15. TOOL.ClientConVar['delay_granted'] = '0'
  16. TOOL.ClientConVar['delay_denied'] = '0'
  17.  
  18. TOOL.ClientConVar['init_delay_granted'] = '0'
  19. TOOL.ClientConVar['init_delay_denied'] = '0'
  20.  
  21. TOOL.ClientConVar['output_on'] = '1'
  22. TOOL.ClientConVar['output_off'] = '0'
  23.  
  24. TOOL.ClientConVar[ "key_granted" ] = "0"
  25. TOOL.ClientConVar[ "key_denied" ] = "0"
  26.  
  27. TOOL.ClientConVar['key_level'] = '1'
  28.  
  29. cleanup.Register( "kcs" )
  30.  
  31. if CLIENT then
  32. language.Add( "tool.kcs.name", "Keycard Scanner" )
  33. language.Add( "tool.kcs.0", "Left Click: Create, Right Click: Update" )
  34. language.Add( "tool.kcs.desc", "Creates a Keycard scanner device" )
  35.  
  36. language.Add( "Undone_Keycard Scanner", "Undone Keycard Scanner" )
  37. language.Add( "Cleanup_Keycard Scanner", "Keycard Scanner" )
  38. language.Add( "Cleaned_Keycard Scanner", "Cleaned up all keycard scanners" )
  39.  
  40. language.Add( "sboxlimit_kcs", "You've hit the Keycard Scanner limit!" )
  41. end
  42.  
  43. function TOOL:SetupScanner( ent )
  44. local data = {
  45. AllowedUsers = {},
  46. AllowedTeams = {},
  47.  
  48. LengthGranted = self:GetClientNumber( "length_granted" ),
  49. LengthDenied = self:GetClientNumber( "length_denied" ),
  50.  
  51. DelayGranted = self:GetClientNumber( "delay_granted" ),
  52. DelayDenied = self:GetClientNumber( "delay_denied" ),
  53.  
  54. InitDelayGranted = self:GetClientNumber( "init_delay_granted" ),
  55. InitDelayDenied = self:GetClientNumber( "init_delay_denied" ),
  56.  
  57. OutputOn = self:GetClientNumber( "output_on" ),
  58. OutputOff = self:GetClientNumber( "output_off" ),
  59.  
  60. KeyGranted = self:GetClientNumber( "key_granted" ),
  61. KeyDenied = self:GetClientNumber( "key_denied" ),
  62.  
  63. Level = self:GetClientNumber("key_level"),
  64.  
  65. Owner = self:GetOwner()
  66. }
  67.  
  68. ent:SetData( data )
  69. end
  70.  
  71. function TOOL:RightClick( tr )
  72. if not WireLib then return false end
  73. if not IsValid( tr.Entity ) or not tr.Entity:GetClass():lower() == "ent_kcs" then return false end
  74.  
  75. if CLIENT then return true end
  76.  
  77. local ply = self:GetOwner()
  78. local trace_ent = tr.Entity
  79.  
  80. if trace_ent.KCSData.Owner == ply then
  81. self:SetupScanner( trace_ent )
  82.  
  83. return true
  84. end
  85. end
  86.  
  87. function TOOL:LeftClick(tr)
  88. if not WireLib then return false end
  89. if IsValid(tr.Entity) and tr.Entity:GetClass() == "player" then return false end
  90.  
  91. if CLIENT then return true end
  92.  
  93. local ply = self:GetOwner()
  94.  
  95. local hitpos = tr.HitPos + tr.HitNormal
  96. local trace_ent = tr.Entity
  97.  
  98. if not ply:CheckLimit( "kcs" ) then return false end
  99.  
  100. local ent = ents.Create( "ent_kcs" )
  101. ent:SetPos( hitpos )
  102. ent:SetAngles( tr.HitNormal:Angle() + Angle(90, 0, 0) )
  103. ent:Spawn()
  104.  
  105. ent:SetPlayer( ply )
  106.  
  107. local freeze = util.tobool( self:GetClientNumber( "freeze" ) )
  108. local weld = util.tobool( self:GetClientNumber( "weld" ) )
  109.  
  110. if freeze or weld then
  111. local phys = ent:GetPhysicsObject()
  112.  
  113. if IsValid( phys ) then phys:EnableMotion( false ) end
  114. end
  115.  
  116. if weld then
  117. local weld = constraint.Weld( ent, trace_ent, 0, 0, 0, true, false )
  118. end
  119.  
  120. self:SetupScanner( ent )
  121.  
  122. undo.Create( "Keycard Scanner" )
  123. undo.AddEntity( ent )
  124. undo.SetPlayer( ply )
  125. undo.Finish()
  126.  
  127. ply:AddCount( "kcs", ent )
  128. ply:AddCleanup( "kcs", ent )
  129.  
  130. return true
  131. end
  132.  
  133. if CLIENT then
  134. local function ResetSettings( ply )
  135. ply:ConCommand( "kcs_length_granted 3" )
  136. ply:ConCommand( "kcs_length_denied 3" )
  137. ply:ConCommand( "kcs_init_delay_granted 0" )
  138. ply:ConCommand( "kcs_init_delay_denied 0" )
  139. ply:ConCommand( "kcs_delay_granted 0" )
  140. ply:ConCommand( "kcs_delay_denied 0" )
  141. ply:ConCommand( "kcs_output_on 1")
  142. ply:ConCommand( "kcs_output_off 0")
  143. ply:ConCommand( "kcs_key_level 1")
  144. end
  145. concommand.Add( "kcs_reset", ResetSettings )
  146.  
  147. function TOOL.BuildCPanel( CPanel )
  148. if not WireLib then
  149. CPanel:Help( "Requires Wiremod" )
  150. else
  151. CPanel:AddControl( "Header", {Text = "Keycard Scanner", Description = "Allows you to place an Keycard Scanner, which can only be accessed with an keycard with the same or higher access level."} )
  152.  
  153. CPanel:NumSlider("Minimum Keycard Level","kcs_key_level",1,5,0)
  154.  
  155. CPanel:CheckBox( "Weld", "kcs_weld" )
  156. CPanel:CheckBox( "Freeze", "kcs_freeze" )
  157.  
  158. CPanel:NumSlider("Output On:", "kcs_output_on", -10, 10, 0)
  159. CPanel:NumSlider("Output Off:", "kcs_output_off", -10, 10, 0)
  160.  
  161. local ctrl = vgui.Create( "CtrlNumPad", CPanel )
  162. ctrl:SetConVar1( "kcs_key_granted" )
  163. ctrl:SetConVar2( "kcs_key_denied" )
  164. ctrl:SetLabel1( "Access Granted Key" )
  165. ctrl:SetLabel2( "Access Denied Key" )
  166. CPanel:AddPanel( ctrl )
  167.  
  168. local granted = vgui.Create( "DForm" )
  169. granted:SetName( "Access Granted Settings" )
  170.  
  171. granted:NumSlider( "Hold Length:", "kcs_length_granted", 0.1, 10, 2 )
  172. granted:NumSlider( "Initial Delay:", "kcs_init_delay_granted", 0, 10, 2 )
  173. granted:NumSlider( "End Delay:", "kcs_delay_granted", 0, 10, 2 )
  174. CPanel:AddItem( granted )
  175.  
  176. local denied = vgui.Create( "DForm" )
  177. denied:SetName( "Access Denied Settings" )
  178.  
  179. denied:NumSlider( "Hold Length:", "kcs_length_denied", 0.1, 10, 2 )
  180. denied:NumSlider( "Initial Delay:", "kcs_init_delay_denied", 0, 10, 2 )
  181. denied:NumSlider( "End Delay:", "kcs_delay_denied", 0, 10, 2 )
  182. CPanel:AddItem( denied )
  183.  
  184. CPanel:Button( "Revert to default settings", "kcs_reset" )
  185. end
  186. end
  187. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement