Don't like ads? PRO users don't see any ads ;-)
Guest

nwvars.lua

By: KatNotDinner on Apr 29th, 2012  |  syntax: Lua  |  size: 13.34 KB  |  hits: 90  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. util.AddNetworkString( "String" )
  2. util.AddNetworkString( "Vector" )
  3. util.AddNetworkString( "Bool" )
  4. util.AddNetworkString( "Entity" )
  5. util.AddNetworkString( "Angle" )
  6. util.AddNetworkString( "Float" )
  7. util.AddNetworkString( "NWVars" )
  8.  
  9. --Major update tons of fixes and optimizations both on client and server
  10. local nwents = {}
  11. local meta1 = _R.Entity
  12. local meta2 = _R.Player
  13.  
  14. function meta1:SetNWString( str, val )
  15.     nwents[self] = nwents[self] or true
  16.         self.NWvars = self.NWvars or {}
  17.         self.NWvars.String = self.NWvars.String or {}
  18.         self.NWvars.String[ str ] = self.NWvars.String[ str ] or {}
  19.         self.NWvars[ str ] = val
  20.         net.Start( "String" )
  21.             net.WriteEntity( self )
  22.             net.WriteString( str )
  23.             net.WriteString( val )
  24.         net.Broadcast()
  25. end
  26.  
  27. function meta1:SetNWEntity( str, ent )
  28.     nwents[self] = nwents[self] or true
  29.         self.NWvars = self.NWvars or {}
  30.         self.NWvars.Entity = self.NWvars.Entity or {}
  31.         self.NWvars.Entity[ str ] = self.NWvars.Entity[ str ] or {}
  32.         self.NWvars.Entity[ str ] = ent
  33.         net.Start( "Entity" )
  34.             net.WriteEntity( self )
  35.             net.WriteString( str )
  36.             net.WriteEntity( ent )
  37.         net.Broadcast()
  38. end
  39.  
  40. function meta1:SetNWBool( str, bool )
  41.     nwents[self] = nwents[self] or true
  42.         self.NWvars = self.NWvars or {}
  43.         self.NWvars.Bool = self.NWvars.Bool or {}
  44.         self.NWvars.Bool[ str ] = self.NWvars.Bool[ str ] or {}
  45.         self.NWvars.Bool[ str ] = bool
  46.         net.Start( "Bool" )
  47.             net.WriteEntity( self )
  48.             net.WriteString( str )
  49.                 net.WriteBit( bool )
  50.         net.Broadcast()
  51. end
  52.  
  53. function meta1:SetNWFloat( str, fl )
  54.     nwents[self] = nwents[self] or true
  55.         self.NWvars = self.NWvars or {}
  56.         self.NWvars.Float = self.NWvars.Float or {}
  57.         self.NWvars.Float[ str ] = self.NWvars.Float[ str ] or {}
  58.         self.NWvars.Float[ str ] = fl
  59.         net.Start( "Float" )
  60.             net.WriteEntity( self )
  61.                 net.WriteString( str )
  62.                 net.WriteFloat( fl )
  63.         net.Broadcast()
  64. end
  65.  
  66. function meta1:SetNWInt( str, int )
  67.     nwents[self] = nwents[self] or true
  68.         self.NWvars = self.NWvars or {}
  69.         self.NWvars.Int = self.NWvars.Int or {}
  70.         self.NWvars.Int[ str ] = self.NWvars.Int[ str ] or {}
  71.         self.NWvars.Int[ str ] = int
  72.         net.Start( "Int" )
  73.             net.WriteEntity( self )
  74.             net.WriteString( str )
  75.             net.WriteInt( int )
  76.         net.Broadcast()
  77. end
  78.  
  79. function meta1:SetNWAngle( str, ang, b )
  80.     nwents[self] = nwents[self] or true
  81.         self.NWvars = self.NWvars or {}
  82.         self.NWvars.Angle = self.NWvars.Angle or {}
  83.         self.NWvars.Angle[ str ] = self.NWvars.Angle[ str ] or {}
  84.         self.NWvars.Angle[ str ] = ang
  85.         net.Start( "Angle" )
  86.             net.WriteEntity( self )
  87.             net.WriteString( str )
  88.             net.WriteAngle( ang )
  89.         net.Broadcast()
  90. end
  91.  
  92. function meta1:SetNWVector( str, vec )
  93.     nwents[self] = nwents[self] or true
  94.         self.NWvars = self.NWvars or {}
  95.         self.NWvars.Vector = self.NWvars.Vector or {}
  96.         self.NWvars.Vector[ str ] = self.NWvars.Vector[ str ] or {}
  97.         self.NWvars.Vector[ str ] = vec
  98.         net.Start( "Vector" )
  99.             net.WriteEntity( self )
  100.             net.WriteString( str )
  101.             net.WriteVector( vec )
  102.         net.Broadcast()
  103. end
  104.  
  105. function meta1:GetNWBool( str )
  106.     if !self.NWvars.Bool[ str ] then return end
  107.         return self.NWvars.Bool[ str ]
  108. end
  109.  
  110. function meta1:GetNWString( str )
  111.     if !self.NWvars.String[ str ] then return end
  112.         return self.NWvars.String[ str ]
  113. end
  114.  
  115. function meta1:GetNWAngle( str )
  116.     if !self.NWvars.Angle[ str ] then return end
  117.         return self.NWvars.Angle[ str ]
  118. end
  119.  
  120. function meta1:GetNWVector( str )
  121.     if !self.NWvars.Vector[ str ] then return end
  122.         return self.NWvars.Vector[ str ]
  123. end
  124.  
  125. function meta1:GetNWFloat( str )
  126.     if !self.NWvars.Float[ str ] then return end
  127.         return self.NWvars.Float[ str ]
  128. end
  129.  
  130. function meta1:GetNWInt( str )
  131.     if !self.NWvars.Int[ str ] then return end
  132.         return self.NWvars.Int[ str ]
  133. end
  134.  
  135. function meta1:GetNWEntity( str )
  136.     if !self.NWvars.Entity[ str ] then return end
  137.         return self.NWvars.Entity[ str ]
  138. end
  139.  
  140. function meta1:GetNetworkedVar( str )
  141.     if self.NWvars.Vector[ str ] then
  142.         return self.NWvars.Vector[ str ]
  143.         elseif self.NWvars.Entity[ str ] then
  144.             return self.NWvars.Entity[ str ]
  145.         elseif self.NWvars.String[ str ] then
  146.             return self.NWvars.String[ str ]
  147.         elseif self.NWvars.Float[ str ] then
  148.             return self.NWvars.Float
  149.         elseif self.NWvars.Angle[ str ] then
  150.             return self.NWvars.Angle[ str ]
  151.         elseif self.NWvars.Bool[ str ] then
  152.             return self.NWvars.Bool[ str ]
  153.         end
  154. end
  155.  
  156. function meta1:SetNetworkedVar( str, var )
  157.     if type(var) == "string" then
  158.             self:SetNWString( str, var )
  159.                 return
  160.         elseif type(var) == "number" then
  161.             if tostring(var):find( "." ) then
  162.                     self:SetNWFloat( str, var )
  163.                 else
  164.                     self:SetNWInt( str, var )
  165.                 end
  166.         elseif type(var) == "bool" then
  167.             self:SetNWBool( str, var )
  168.         elseif var.p and var.y and var.r then
  169.             self:SetNWAngle( str, var )
  170.         elseif var.x and var.y and var.z then
  171.             self:SetNWVector( str, var )
  172.         elseif ValidEntity(var) then
  173.             self:SetNWEntity( str, var )
  174.         end
  175. end
  176.  
  177. /*function meta2:SetNWString( str, val )
  178.     nwents[self] = nwents[self] or true
  179.         self.NWvars = self.NWvars or {}
  180.         self.NWvars.String[ str ] = self.NWvars.String[ str ] or {}
  181.         self.NWvars.String[ str ] = val
  182.         net.Start( "String" )
  183.             net.WriteEntity( self )
  184.             net.WriteString( str )
  185.             net.WriteString( val )
  186.         net.Broadcast()
  187. end
  188.  
  189. function meta2:SetNWEntity( str, ent )
  190.     nwents[self] = nwents[self] or true
  191.         self.NWvars = self.NWvars or {}
  192.         self.NWvars.Entity[ str ] = self.NWvars.Entity[ str ] or {}
  193.         self.NWvars.Entity[ str ] = ent
  194.         net.Start( "Entity" )
  195.             net.WriteEntity( self )
  196.             net.WriteString( str )
  197.             net.WriteEntity( ent )
  198.         net.Broadcast()
  199. end
  200.  
  201. function meta2:SetNWBool( str, bool )
  202.     nwents[self] = nwents[self] or true
  203.         self.NWvars = self.NWvars or {}
  204.         self.NWvars.Bool[ str ] = self.NWvars.Bool[ str ] or {}
  205.         self.NWvars.Bool[ str ] = bool
  206.         net.Start( "Bool" )
  207.             net.WriteEntity( self )
  208.             net.WriteString( str )
  209.                 if bool then   
  210.                         net.WriteInt( 1 )
  211.                 else
  212.                         net.WriteInt( 2 )
  213.                 end
  214.         net.Broadcast()
  215. end
  216.  
  217. function meta2:SetNWFloat( str, fl )
  218.     nwents[self] = nwents[self] or true
  219.         self.NWvars = self.NWvars or {}
  220.         self.NWvars.Float[ str ] = self.NWvars.Float[ str ] or {}
  221.         self.NWvars.Float[ str ] = fl
  222.         net.Start( "Float" )
  223.             net.WriteEntity( self )
  224.                 net.WriteString( str )
  225.                 net.WriteFloat( fl )
  226.         net.Broadcast()
  227. end
  228.  
  229. function meta2:SetNWInt( str, int )
  230.     nwents[self] = nwents[self] or true
  231.         self.NWvars = self.NWvars or {}
  232.         self.NWvars.Int[ str ] = self.NWvars.Int[ str ] or {}
  233.         self.NWvars.Int[ str ] = int
  234.         net.Start( "Int" )
  235.             net.WriteEntity( self )
  236.             net.WriteString( str )
  237.             net.WriteInt( int )
  238.         net.Broadcast()
  239. end
  240.  
  241. function meta2:SetNWAngle( str, ang, b )
  242.     nwents[self] = nwents[self] or true
  243.         self.NWvars = self.NWvars or {}
  244.         self.NWvars.Angle[ str ] = self.NWvars.Angle[ str ] or {}
  245.         self.NWvars.Angle[ str ] = ang
  246.         net.Start( "Angle" )
  247.             net.WriteEntity( self )
  248.             net.WriteString( str )
  249.             net.WriteAngle( ang )
  250.         net.Broadcast()
  251. end
  252.  
  253. function meta2:SetNWVector( str, vec )
  254.     nwents[self] = nwents[self] or true
  255.         self.NWvars = self.NWvars or {}
  256.         self.NWvars.Vector[ str ] = self.NWvars.Vector[ str ] or {}
  257.         self.NWvars.Vector[ str ] = vec
  258.         net.Start( "Vector" )
  259.             net.WriteEntity( self )
  260.             net.WriteString( str )
  261.             net.WriteVector( vec )
  262.         net.Broadcast()
  263. end
  264.  
  265. function meta2:SetNetworkedVar( str, var )
  266.     if type(var) == "string" then
  267.             self:SetNWString( str, var )
  268.                 return
  269.         elseif type(var) == "number" then
  270.             if tostring(var):find( "." ) then
  271.                     self:SetNWFloat( str, var )
  272.                 else
  273.                     self:SetNWInt( str, var )
  274.                 end
  275.         elseif type(var) == "bool" then
  276.             self:SetNWBool( str, var )
  277.         elseif var.p and var.y and var.r then
  278.             self:SetNWAngle( str, var )
  279.         elseif var.x and var.y and var.z then
  280.             self:SetNWVector( str, var )
  281.         elseif ValidEntity(var) then
  282.             self:SetNWEntity( str, var )
  283.         end
  284. end
  285.  
  286. function meta2:GetNWBool( str )
  287.     if !self.NWvars.Bool[ str ] then return end
  288.         return self.NWvars.Bool[ str ]
  289. end
  290.  
  291. function meta2:GetNWString( str )
  292.     if !self.NWvars.String[ str ] then return end
  293.         return self.NWvars.String[ str ]
  294. end
  295.  
  296. function meta2:GetNWAngle( str )
  297.     if !self.NWvars.Angle[ str ] then return end
  298.         return self.NWvars.Angle[ str ]
  299. end
  300.  
  301. function meta2:GetNWVector( str )
  302.     if !self.NWvars.Vector[ str ] then return end
  303.         return self.NWvars.Vector[ str ]
  304. end
  305.  
  306. function meta2:GetNWFloat( str )
  307.     if !self.NWvars.Float[ str ] then return end
  308.         return self.NWvars.Float[ str ]
  309. end
  310.  
  311. function meta2:GetNWInt( str )
  312.     if !self.NWvars.Int[ str ] then return end
  313.         return self.NWvars.Int[ str ]
  314. end
  315.  
  316. function meta2:GetNWEntity( str )
  317.     if !self.NWvars.Entity[ str ] then return end
  318.         return self.NWvars.Entity[ str ]
  319. end
  320.  
  321. function meta2:GetNetworkedVar( str )
  322.     if self.NWvars.Vector[ str ] then
  323.         return self.NWvars.Vector[ str ]
  324.         elseif self.NWvars.Entity[ str ] then
  325.             return self.NWvars.Entity[ str ]
  326.         elseif self.NWvars.String[ str ] then
  327.             return self.NWvars.String[ str ]
  328.         elseif self.NWvars.Float[ str ] then
  329.             return self.NWvars.Float
  330.         elseif self.NWvars.Angle[ str ] then
  331.             return self.NWvars.Angle[ str ]
  332.         elseif self.NWvars.Bool[ str ] then
  333.             return self.NWvars.Bool[ str ]
  334.         end
  335. end
  336. */
  337. hook.Add( "PlayerInitialSpawn", "NWVars", function( ply )
  338.         local time = 0 -- We should create some delays between the datastreams
  339.         if nwents then
  340.             for k, v in pairs(nwents) do
  341.                 time = time + .3
  342.                     timer.Simple( time, function()
  343.                     if k.NWvars then
  344.                                 net.Start( "NWVars", ply )
  345.                                         net.WriteEntity( k )
  346.                                         net.WriteTable(k.NWvars)
  347.                                     net.Send(ply)
  348.                         end
  349.                     end )
  350.             end
  351.         end
  352. end )
  353.  
  354. hook.Add( "PlayerDisconnected", "lolwut", function( ply )
  355.     if nwents and nwents[ply] then
  356.             nwents[ply] = nil
  357.         end
  358. end )
  359.  
  360. net.Receive( "AngleCL", function(ply, len ) -- kinda messed up argument names
  361.     local ent = net.ReadEntity()
  362.         local str = net.ReadString()
  363.         local var = net.ReadAngle()
  364.         ent.NWvars = ent.NWvars or {}
  365.         ent.NWvars.Angle = ent.NWvars.Angle or {}
  366.         ent.NWvars.Angle[ str ] = ent.NWvars.Angle[ str ] or {}
  367.         ent.NWvars.Angle[ str ] = var
  368.         timer.Simple( .5, function()
  369.         ent:SetNWAngle( str, var )
  370.         end )
  371. end )
  372.  
  373. net.Receive( "VectorCL", function(ply, len )
  374.     local ent = net.ReadEntity()
  375.         local str = net.ReadString()
  376.         local var = net.ReadVector()
  377.         ent.NWvars = ent.NWvars or {}
  378.         ent.NWvars.Vector = ent.NWvars.Vector or {}
  379.         ent.NWvars.Vector[ str ] = ent.NWvars.Vector[ str ] or {}
  380.         ent.NWvars.Vector[ str ] = var
  381.         timer.Simple( .5, function()
  382.         ent:SetNWVector( str, var )
  383.         end )
  384. end )
  385.  
  386. net.Receive( "EntityCL", function(ply, len )
  387.     local ent = net.ReadEntity()
  388.         local str = net.ReadString()
  389.         local var = net.ReadEntity()
  390.         ent.NWvars = ent.NWvars or {}
  391.         ent.NWvars.Entity = ent.NWvars.Entity or {}
  392.         ent.NWvars.Entity[ str ] = ent.NWvars.String[ str ] or {}
  393.         ent.NWvars.Entity[ str ] = var
  394.         timer.Simple( .5, function()
  395.         ent:SetNWEntity( str, var )
  396.         end )
  397. end )
  398.  
  399. net.Receive( "StringCL", function(ply, len )
  400.     local ent = net.ReadEntity()
  401.         local str = net.ReadString()
  402.         local var = net.ReadString()
  403.         ent.NWvars = ent.NWvars or {}
  404.         ent.NWvars.String = ent.NWvars.String or {}
  405.         ent.NWvars.String[ str ] = ent.NWvars.String[ str ] or {}
  406.         ent.NWvars.String[ str ] = var
  407.         timer.Simple( .5, function()
  408.         ent:SetNWString( str, var )
  409.         end )
  410. end )
  411.  
  412. net.Receive( "FloatCL", function(ply, len )
  413.     local ent = net.ReadEntity()
  414.         local str = net.ReadString()
  415.         local var = net.ReadFloat()
  416.         ent.NWvars = ent.NWvars or {}
  417.         ent.NWvars.Float = ent.NWvars.Float or {}
  418.         ent.NWvars.Float[ str ] = ent.NWvars.Float[ str ] or {}
  419.         ent.NWvars.Float[ str ] = var
  420.         timer.Simple( .5, function()
  421.         ent:SetNWFloat( str, var )
  422.         end )
  423. end )
  424.  
  425. net.Receive( "IntCL", function( le, ply )
  426.     local ent = net.ReadEntity()
  427.         local str = net.ReadString()
  428.         local var = net.ReadInt( 32 )
  429.         ent.NWvars = ent.NWvars or {}
  430.         ent.NWvars.Int = ent.NWvars.Int or {}
  431.         ent.NWvars.Int[ str ] = ent.NWvars.Int[ str ] or {}
  432.         ent.NWvars.Int[ str ] = var
  433.         timer.Simple( .5, function()
  434.         ent:SetNWInt( str, var )
  435.         end )
  436. end  )
  437.  
  438. net.Receive( "BoolCL", function(ply, len )
  439.     local ent = net.ReadEntity()
  440.         local str = net.ReadString()
  441.         local var = net.ReadBit()
  442.         ent.NWvars = ent.NWvars or {}
  443.         ent.NWvars.Bool = ent.NWvars.Bool or {}
  444.         ent.NWvars.Bool[ str ] = ent.NWvars.Bool[ str ] or {}
  445.         ent.NWvars.Bool[ str ] = var
  446.         timer.Simple( .5, function()
  447.         ent:SetNWBool( str, var )
  448.         end )
  449. end )
  450.  
  451. _R.Entity.SetNWVar = meta1.SetNetworkedVar -- making sure that I override ALL of the nwvar functions
  452. _R.Entity.SetNetworkedInt = meta1.SetNWInt
  453. _R.Entity.SetNetworkedFloat = meta1.SetNWFloat
  454. _R.Entity.SetNetworkedEntity = meta1.SetNWEntity
  455. _R.Entity.SetNetworkedString = meta1.SetNWString
  456. _R.Entity.SetNetworkedBool = meta1.SetNWBool
  457. _R.Entity.SetNetworkedAngle = meta1.SetNWAngle
  458. _R.Entity.SetNetworkedVector = meta1.SetNWVector
  459. /*
  460. _R.Player.SetNWVar = meta2.SetNetworkedVar -- making sure that I override ALL of the nwvar functions
  461. _R.Player.SetNetworkedInt = meta2.SetNWInt
  462. _R.Player.SetNetworkedFloat = meta2.SetNWFloat
  463. _R.Player.SetNetworkedEntity = meta2.SetNWEntity
  464. _R.Player.SetNetworkedString = meta2.SetNWString
  465. _R.Player.SetNetworkedBool = meta2.SetNWBool
  466. _R.Player.SetNetworkedAngle = meta2.SetNWAngle
  467. _R.Player.SetNetworkedVector = meta2.SetNWVector*/