Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (SERVER) then
- CreateConVar( "sbox_maxkcs", 100 )
- end
- TOOL.Category = "Construction"
- TOOL.Name = "Keycard Scanner"
- TOOL.Command = nil
- TOOL.ClientConVar['weld'] = '1'
- TOOL.ClientConVar['freeze'] = '1'
- TOOL.ClientConVar['length_granted'] = '0.1'
- TOOL.ClientConVar['length_denied'] = '0.1'
- TOOL.ClientConVar['delay_granted'] = '0'
- TOOL.ClientConVar['delay_denied'] = '0'
- TOOL.ClientConVar['init_delay_granted'] = '0'
- TOOL.ClientConVar['init_delay_denied'] = '0'
- TOOL.ClientConVar['output_on'] = '1'
- TOOL.ClientConVar['output_off'] = '0'
- TOOL.ClientConVar[ "key_granted" ] = "0"
- TOOL.ClientConVar[ "key_denied" ] = "0"
- TOOL.ClientConVar['key_level'] = '1'
- cleanup.Register( "kcs" )
- if CLIENT then
- language.Add( "tool.kcs.name", "Keycard Scanner" )
- language.Add( "tool.kcs.0", "Left Click: Create, Right Click: Update" )
- language.Add( "tool.kcs.desc", "Creates a Keycard scanner device" )
- language.Add( "Undone_Keycard Scanner", "Undone Keycard Scanner" )
- language.Add( "Cleanup_Keycard Scanner", "Keycard Scanner" )
- language.Add( "Cleaned_Keycard Scanner", "Cleaned up all keycard scanners" )
- language.Add( "sboxlimit_kcs", "You've hit the Keycard Scanner limit!" )
- end
- function TOOL:SetupScanner( ent )
- local data = {
- AllowedUsers = {},
- AllowedTeams = {},
- LengthGranted = self:GetClientNumber( "length_granted" ),
- LengthDenied = self:GetClientNumber( "length_denied" ),
- DelayGranted = self:GetClientNumber( "delay_granted" ),
- DelayDenied = self:GetClientNumber( "delay_denied" ),
- InitDelayGranted = self:GetClientNumber( "init_delay_granted" ),
- InitDelayDenied = self:GetClientNumber( "init_delay_denied" ),
- OutputOn = self:GetClientNumber( "output_on" ),
- OutputOff = self:GetClientNumber( "output_off" ),
- KeyGranted = self:GetClientNumber( "key_granted" ),
- KeyDenied = self:GetClientNumber( "key_denied" ),
- Level = self:GetClientNumber("key_level"),
- Owner = self:GetOwner()
- }
- ent:SetData( data )
- end
- function TOOL:RightClick( tr )
- if not WireLib then return false end
- if not IsValid( tr.Entity ) or not tr.Entity:GetClass():lower() == "ent_kcs" then return false end
- if CLIENT then return true end
- local ply = self:GetOwner()
- local trace_ent = tr.Entity
- if trace_ent.KCSData.Owner == ply then
- self:SetupScanner( trace_ent )
- return true
- end
- end
- function TOOL:LeftClick(tr)
- if not WireLib then return false end
- if IsValid(tr.Entity) and tr.Entity:GetClass() == "player" then return false end
- if CLIENT then return true end
- local ply = self:GetOwner()
- local hitpos = tr.HitPos + tr.HitNormal
- local trace_ent = tr.Entity
- if not ply:CheckLimit( "kcs" ) then return false end
- local ent = ents.Create( "ent_kcs" )
- ent:SetPos( hitpos )
- ent:SetAngles( tr.HitNormal:Angle() + Angle(90, 0, 0) )
- ent:Spawn()
- ent:SetPlayer( ply )
- local freeze = util.tobool( self:GetClientNumber( "freeze" ) )
- local weld = util.tobool( self:GetClientNumber( "weld" ) )
- if freeze or weld then
- local phys = ent:GetPhysicsObject()
- if IsValid( phys ) then phys:EnableMotion( false ) end
- end
- if weld then
- local weld = constraint.Weld( ent, trace_ent, 0, 0, 0, true, false )
- end
- self:SetupScanner( ent )
- undo.Create( "Keycard Scanner" )
- undo.AddEntity( ent )
- undo.SetPlayer( ply )
- undo.Finish()
- ply:AddCount( "kcs", ent )
- ply:AddCleanup( "kcs", ent )
- return true
- end
- if CLIENT then
- local function ResetSettings( ply )
- ply:ConCommand( "kcs_length_granted 3" )
- ply:ConCommand( "kcs_length_denied 3" )
- ply:ConCommand( "kcs_init_delay_granted 0" )
- ply:ConCommand( "kcs_init_delay_denied 0" )
- ply:ConCommand( "kcs_delay_granted 0" )
- ply:ConCommand( "kcs_delay_denied 0" )
- ply:ConCommand( "kcs_output_on 1")
- ply:ConCommand( "kcs_output_off 0")
- ply:ConCommand( "kcs_key_level 1")
- end
- concommand.Add( "kcs_reset", ResetSettings )
- function TOOL.BuildCPanel( CPanel )
- if not WireLib then
- CPanel:Help( "Requires Wiremod" )
- else
- 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."} )
- CPanel:NumSlider("Minimum Keycard Level","kcs_key_level",1,5,0)
- CPanel:CheckBox( "Weld", "kcs_weld" )
- CPanel:CheckBox( "Freeze", "kcs_freeze" )
- CPanel:NumSlider("Output On:", "kcs_output_on", -10, 10, 0)
- CPanel:NumSlider("Output Off:", "kcs_output_off", -10, 10, 0)
- local ctrl = vgui.Create( "CtrlNumPad", CPanel )
- ctrl:SetConVar1( "kcs_key_granted" )
- ctrl:SetConVar2( "kcs_key_denied" )
- ctrl:SetLabel1( "Access Granted Key" )
- ctrl:SetLabel2( "Access Denied Key" )
- CPanel:AddPanel( ctrl )
- local granted = vgui.Create( "DForm" )
- granted:SetName( "Access Granted Settings" )
- granted:NumSlider( "Hold Length:", "kcs_length_granted", 0.1, 10, 2 )
- granted:NumSlider( "Initial Delay:", "kcs_init_delay_granted", 0, 10, 2 )
- granted:NumSlider( "End Delay:", "kcs_delay_granted", 0, 10, 2 )
- CPanel:AddItem( granted )
- local denied = vgui.Create( "DForm" )
- denied:SetName( "Access Denied Settings" )
- denied:NumSlider( "Hold Length:", "kcs_length_denied", 0.1, 10, 2 )
- denied:NumSlider( "Initial Delay:", "kcs_init_delay_denied", 0, 10, 2 )
- denied:NumSlider( "End Delay:", "kcs_delay_denied", 0, 10, 2 )
- CPanel:AddItem( denied )
- CPanel:Button( "Revert to default settings", "kcs_reset" )
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement