--by exechack.cc Toxicbadkazuin /* Universal Laser Sight Coded by Tyler Wearing (0xymoron) Purpose: none really, it's just fancy. How to use: type "laser" in console to toggle the laser sight. */ CreateClientConVar( "laser_color_r", 255, true, false ) CreateClientConVar( "laser_color_g", 0, true, false ) CreateClientConVar( "laser_color_b", 0, true, false ) CreateClientConVar( "laser_dot_size", 20, true, false ) CreateClientConVar( "laser_beam_size", 3, true, false ) local blockedWeps = { "weapon_physgun", "pocket", "keys", "gmod_tool", } local laserToggle = true -- Toggle command concommand.Add( "laser", function() laserToggle = !laserToggle surface.PlaySound( "buttons/button19.wav" ) if laserToggle then chat.AddText( Color( 255, 255, 0 ), "[Laser] ", Color( 0, 255, 0 ), "Laser activated." ) else chat.AddText( Color( 255, 255, 0 ), "[Laser] ", Color( 255, 0, 0 ), "Laser deactivated." ) end end ) -- coder god fr1kin says to do this to improve speed, so why not? local wep, viewmodel, muzzle, trace, startpos, endpos local function laserSight() if !laserToggle then return end wep = LocalPlayer():GetActiveWeapon() viewmodel = LocalPlayer():GetViewModel() trace = LocalPlayer():GetEyeTrace().HitPos -- make sure their weapon isnt broken or nil if viewmodel && IsValid( wep ) && IsValid( viewmodel ) then -- ignore blocked weps if !table.HasValue( blockedWeps, wep:GetClass() ) then muzzle = viewmodel:LookupAttachment( "muzzle" ) -- failsafe if muzzle == 0 then muzzle = viewmodel:LookupAttachment( "1" ) end if viewmodel:GetAttachment( muzzle ) then cam.Start3D( EyePos(), EyeAngles() ) -- Set laser start/end pos startpos = viewmodel:GetAttachment( muzzle ).Pos endpos = trace -- Draw the beam render.SetMaterial( Material( "trails/laser" ) ) render.DrawBeam( startpos, endpos, GetConVarNumber( "laser_beam_size" ), 0, 0, Color( GetConVarNumber( "laser_color_r" ), GetConVarNumber( "laser_color_g" ), GetConVarNumber( "laser_color_b" ) ) ) -- End of laser dot thing. Credits to sethhack for being the first to do this. render.SetMaterial( Material( "Sprites/light_glow02_add_noz" ) ) render.DrawQuadEasy( endpos, ( EyePos() - trace ):GetNormal(), GetConVarNumber( "laser_dot_size" ), GetConVarNumber( "laser_dot_size" ), color_white, 0 ) cam.End3D() end end end end -- Menu concommand.Add( "laser_menu", function() local Frame = vgui.Create( "DFrame" ) Frame:Center() Frame:SetSize( 430, 375 ) Frame:MakePopup() Frame:ShowCloseButton( true ) Frame:SetTitle( "Laser Sight Menu | Coded by 0xymoron @ SidewaysGaming.net by exechack.cc/lua" ) Frame.Paint = function() draw.RoundedBox( 8, 0, 0, Frame:GetWide(), Frame:GetTall(), Color( GetConVarNumber( "laser_color_r" ), GetConVarNumber( "laser_color_g" ), GetConVarNumber( "laser_color_b" ), 150 ) ) end local ColMixer = vgui.Create( "DColorMixer", Frame ) ColMixer:SetPos( 5, 25 ) ColMixer:SetSize( 420, 300 ) ColMixer:SetConVarR( "laser_color_r" ) ColMixer:SetConVarG( "laser_color_g" ) ColMixer:SetConVarB( "laser_color_b" ) ColMixer:SetPalette( true ) ColMixer:SetAlphaBar( false ) ColMixer:SetWangs( true ) local LaserWidth = vgui.Create( "DNumSlider", Frame ) LaserWidth:SetConVar( "laser_beam_size" ) LaserWidth:SetText( "Laser Sight Width" ) LaserWidth:SetPos( 5, 325 ) LaserWidth:SetSize( 420, 20 ) LaserWidth:SetMin( 1 ) LaserWidth:SetMax( 10 ) LaserWidth:SetDecimals( 0 ) local DotSize = vgui.Create( "DNumSlider", Frame ) DotSize:SetConVar( "laser_dot_size" ) DotSize:SetText( "Laser Dot Size" ) DotSize:SetPos( 5, 350 ) DotSize:SetSize( 420, 20 ) DotSize:SetMin( 5 ) DotSize:SetMax( 50 ) DotSize:SetDecimals( 0 ) end ) hook.Add( "HUDPaint", "laserSight", laserSight )