Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*PLUGIN.Name = "Server-side NWVars"
- PLUGIN.Description = "Server-side managment of nwvars"
- PLUGIN.Author = "KatNotDinner"*/
- if CLIENT then
- return
- end
- /*function PLUGIN.Init()
- print( "This is the server side NWVars plugin." )
- end*/
- --Major update tons of fixes and optimizations both on client and server
- local nwents = {}
- local meta1 = FindMetaTable( "Entity" )
- local meta2 = FindMetaTable( "Player" )
- function meta1:SetNWString( str, val )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.String = self.NWvars.String or {}
- --self.NWvars.String[ str ] = self.NWvars.String[ str ] or {}
- self.NWvars.String[ str ] = val
- net.Start( "String" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteString( val )
- net.Broadcast()
- end
- function meta1:SetNWEntity( str, ent )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Entity = self.NWvars.Entity or {}
- --self.NWvars.Entity[ str ] = self.NWvars.Entity[ str ] or {}
- self.NWvars.Entity[ str ] = ent
- net.Start( "Entity" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteEntity( ent )
- net.Broadcast()
- end
- function meta1:SetNWBool( str, bool )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Bool = self.NWvars.Bool or {}
- --self.NWvars.Bool[ str ] = self.NWvars.Bool[ str ] or {}
- self.NWvars.Bool[ str ] = bool
- net.Start( "Bool" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteBit( bool )
- net.Broadcast()
- end
- function meta1:SetNWFloat( str, fl )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Float = self.NWvars.Float or {}
- --self.NWvars.Float[ str ] = self.NWvars.Float[ str ] or {}
- self.NWvars.Float[ str ] = fl
- net.Start( "Float" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteFloat( fl )
- net.Broadcast()
- end
- function meta1:SetNWInt( str, int )
- print("\n"..int)
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Int = self.NWvars.Int or {}
- --self.NWvars.Int[ str ] = self.NWvars.Int[ str ] or {}
- self.NWvars.Int[ str ] = int
- net.Start( "Int" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteInt( int, 32 )
- net.Broadcast()
- end
- function meta1:SetNWAngle( str, ang, b )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Angle = self.NWvars.Angle or {}
- --self.NWvars.Angle[ str ] = self.NWvars.Angle[ str ] or {}
- self.NWvars.Angle[ str ] = ang
- net.Start( "Angle" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteAngle( ang )
- net.Broadcast()
- end
- function meta1:SetNWVector( str, vec )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Vector = self.NWvars.Vector or {}
- --self.NWvars.Vector[ str ] = self.NWvars.Vector[ str ] or {}
- self.NWvars.Vector[ str ] = vec
- net.Start( "Vector" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteVector( vec )
- net.Broadcast()
- end
- function meta1:GetNWBool( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Bool[ str ] then return end
- return self.NWvars.Bool[ str ]
- end
- function meta1:GetNWString( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.String[ str ] then return end
- return self.NWvars.String[ str ]
- end
- function meta1:GetNWAngle( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Angle[ str ] then return end
- return self.NWvars.Angle[ str ]
- end
- function meta1:GetNWVector( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Vector[ str ] then return end
- return self.NWvars.Vector[ str ]
- end
- function meta1:GetNWFloat( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Float[ str ] then return end
- return self.NWvars.Float[ str ]
- end
- function meta1:GetNWInt( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Int[ str ] then return end
- return self.NWvars.Int[ str ]
- end
- function meta1:GetNWEntity( str )
- if !self.NWvars then Error( "No NWVars for Entity "..self:EntIndex().."!" ) debug.Trace() return end
- if !self.NWvars.Entity[ str ] then return end
- return self.NWvars.Entity[ str ]
- end
- function meta1:GetNetworkedVar( str )
- if self.NWvars.Vector[ str ] then
- return self.NWvars.Vector[ str ]
- elseif self.NWvars.Entity[ str ] then
- return self.NWvars.Entity[ str ]
- elseif self.NWvars.String[ str ] then
- return self.NWvars.String[ str ]
- elseif self.NWvars.Float[ str ] then
- return self.NWvars.Float
- elseif self.NWvars.Angle[ str ] then
- return self.NWvars.Angle[ str ]
- elseif self.NWvars.Bool[ str ] then
- return self.NWvars.Bool[ str ]
- end
- end
- function meta1:SetNetworkedVar( str, var )
- if type(var) == "string" then
- self:SetNWString( str, var )
- return
- elseif type(var) == "number" then
- if tostring(var):find( "." ) then
- self:SetNWFloat( str, var )
- else
- self:SetNWInt( str, var )
- end
- elseif type(var) == "bool" then
- self:SetNWBool( str, var )
- elseif var.p and var.y and var.r then
- self:SetNWAngle( str, var )
- elseif var.x and var.y and var.z then
- self:SetNWVector( str, var )
- elseif IsValid(var) then
- self:SetNWEntity( str, var )
- end
- end
- /*function meta2:SetNWString( str, val )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.String[ str ] = self.NWvars.String[ str ] or {}
- self.NWvars.String[ str ] = val
- net.Start( "String" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteString( val )
- net.Broadcast()
- end
- function meta2:SetNWEntity( str, ent )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Entity[ str ] = self.NWvars.Entity[ str ] or {}
- self.NWvars.Entity[ str ] = ent
- net.Start( "Entity" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteEntity( ent )
- net.Broadcast()
- end
- function meta2:SetNWBool( str, bool )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Bool[ str ] = self.NWvars.Bool[ str ] or {}
- self.NWvars.Bool[ str ] = bool
- net.Start( "Bool" )
- net.WriteEntity( self )
- net.WriteString( str )
- if bool then
- net.WriteInt( 1 )
- else
- net.WriteInt( 2 )
- end
- net.Broadcast()
- end
- function meta2:SetNWFloat( str, fl )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Float[ str ] = self.NWvars.Float[ str ] or {}
- self.NWvars.Float[ str ] = fl
- net.Start( "Float" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteFloat( fl )
- net.Broadcast()
- end
- function meta2:SetNWInt( str, int )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Int[ str ] = self.NWvars.Int[ str ] or {}
- self.NWvars.Int[ str ] = int
- net.Start( "Int" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteInt( int )
- net.Broadcast()
- end
- function meta2:SetNWAngle( str, ang, b )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Angle[ str ] = self.NWvars.Angle[ str ] or {}
- self.NWvars.Angle[ str ] = ang
- net.Start( "Angle" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteAngle( ang )
- net.Broadcast()
- end
- function meta2:SetNWVector( str, vec )
- nwents[self] = nwents[self] or true
- self.NWvars = self.NWvars or {}
- self.NWvars.Vector[ str ] = self.NWvars.Vector[ str ] or {}
- self.NWvars.Vector[ str ] = vec
- net.Start( "Vector" )
- net.WriteEntity( self )
- net.WriteString( str )
- net.WriteVector( vec )
- net.Broadcast()
- end
- function meta2:SetNetworkedVar( str, var )
- if type(var) == "string" then
- self:SetNWString( str, var )
- return
- elseif type(var) == "number" then
- if tostring(var):find( "." ) then
- self:SetNWFloat( str, var )
- else
- self:SetNWInt( str, var )
- end
- elseif type(var) == "bool" then
- self:SetNWBool( str, var )
- elseif var.p and var.y and var.r then
- self:SetNWAngle( str, var )
- elseif var.x and var.y and var.z then
- self:SetNWVector( str, var )
- elseif IsValid(var) then
- self:SetNWEntity( str, var )
- end
- end
- function meta2:GetNWBool( str )
- if !self.NWvars.Bool[ str ] then return end
- return self.NWvars.Bool[ str ]
- end
- function meta2:GetNWString( str )
- if !self.NWvars.String[ str ] then return end
- return self.NWvars.String[ str ]
- end
- function meta2:GetNWAngle( str )
- if !self.NWvars.Angle[ str ] then return end
- return self.NWvars.Angle[ str ]
- end
- function meta2:GetNWVector( str )
- if !self.NWvars.Vector[ str ] then return end
- return self.NWvars.Vector[ str ]
- end
- function meta2:GetNWFloat( str )
- if !self.NWvars.Float[ str ] then return end
- return self.NWvars.Float[ str ]
- end
- function meta2:GetNWInt( str )
- if !self.NWvars.Int[ str ] then return end
- return self.NWvars.Int[ str ]
- end
- function meta2:GetNWEntity( str )
- if !self.NWvars.Entity[ str ] then return end
- return self.NWvars.Entity[ str ]
- end
- function meta2:GetNetworkedVar( str )
- if self.NWvars.Vector[ str ] then
- return self.NWvars.Vector[ str ]
- elseif self.NWvars.Entity[ str ] then
- return self.NWvars.Entity[ str ]
- elseif self.NWvars.String[ str ] then
- return self.NWvars.String[ str ]
- elseif self.NWvars.Float[ str ] then
- return self.NWvars.Float
- elseif self.NWvars.Angle[ str ] then
- return self.NWvars.Angle[ str ]
- elseif self.NWvars.Bool[ str ] then
- return self.NWvars.Bool[ str ]
- end
- end
- */
- hook.Add( "PlayerInitialSpawn", "NWVars", function( ply )
- local time = 0 -- We should create some delays between the datastreams
- if nwents then
- timer.Simple( 0, function()
- for k, v in pairs(nwents) do
- time = time + .3
- timer.Simple( time, function()
- if k.NWvars then
- net.Start( "NWVars", ply )
- net.WriteEntity( k )
- net.WriteTable(k.NWvars)
- net.Send(ply)
- end
- end )
- end
- end )
- end
- end )
- hook.Add( "PlayerDisconnected", "lolwut", function( ply )
- if nwents and nwents[ply] then
- nwents[ply] = nil
- end
- end )
- net.Receive( "AngleCL", function(ply, len ) -- kinda messed up argument names
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadAngle()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Angle = ent.NWvars.Angle or {}
- ent.NWvars.Angle[ str ] = ent.NWvars.Angle[ str ] or {}
- ent.NWvars.Angle[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWAngle( str, var )
- end )
- end )
- net.Receive( "VectorCL", function(ply, len )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadVector()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Vector = ent.NWvars.Vector or {}
- ent.NWvars.Vector[ str ] = ent.NWvars.Vector[ str ] or {}
- ent.NWvars.Vector[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWVector( str, var )
- end )
- end )
- net.Receive( "EntityCL", function(ply, len )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadEntity()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Entity = ent.NWvars.Entity or {}
- ent.NWvars.Entity[ str ] = ent.NWvars.String[ str ] or {}
- ent.NWvars.Entity[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWEntity( str, var )
- end )
- end )
- net.Receive( "StringCL", function(ply, len )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadString()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.String = ent.NWvars.String or {}
- ent.NWvars.String[ str ] = ent.NWvars.String[ str ] or {}
- ent.NWvars.String[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWString( str, var )
- end )
- end )
- net.Receive( "FloatCL", function(ply, len )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadFloat()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Float = ent.NWvars.Float or {}
- ent.NWvars.Float[ str ] = ent.NWvars.Float[ str ] or {}
- ent.NWvars.Float[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWFloat( str, var )
- end )
- end )
- net.Receive( "IntCL", function( le, ply )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadInt( 32 )
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Int = ent.NWvars.Int or {}
- ent.NWvars.Int[ str ] = ent.NWvars.Int[ str ] or {}
- ent.NWvars.Int[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWInt( str, var )
- end )
- end )
- net.Receive( "BoolCL", function(ply, len )
- local ent = net.ReadEntity()
- local str = net.ReadString()
- local var = net.ReadBit()
- ent.NWvars = ent.NWvars or {}
- ent.NWvars.Bool = ent.NWvars.Bool or {}
- ent.NWvars.Bool[ str ] = ent.NWvars.Bool[ str ] or {}
- ent.NWvars.Bool[ str ] = var
- timer.Simple( .5, function()
- ent:SetNWBool( str, var )
- end )
- end )
- meta1.SetNWVar = meta1.SetNetworkedVar -- making sure that I override ALL of the nwvar functions
- meta1.SetNetworkedInt = meta1.SetNWInt
- meta1.SetNetworkedFloat = meta1.SetNWFloat
- meta1.SetNetworkedEntity = meta1.SetNWEntity
- meta1.SetNetworkedString = meta1.SetNWString
- meta1.SetNetworkedBool = meta1.SetNWBool
- meta1.SetNetworkedAngle = meta1.SetNWAngle
- meta1.SetNetworkedVector = meta1.SetNWVector
- /*
- _R.Player.SetNWVar = meta2.SetNetworkedVar -- making sure that I override ALL of the nwvar functions
- _R.Player.SetNetworkedInt = meta2.SetNWInt
- _R.Player.SetNetworkedFloat = meta2.SetNWFloat
- _R.Player.SetNetworkedEntity = meta2.SetNWEntity
- _R.Player.SetNetworkedString = meta2.SetNWString
- _R.Player.SetNetworkedBool = meta2.SetNWBool
- _R.Player.SetNetworkedAngle = meta2.SetNWAngle
- _R.Player.SetNetworkedVector = meta2.SetNWVector*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement