Advertisement
Guest User

Overv

a guest
Aug 3rd, 2010
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.12 KB | None | 0 0
  1. --[[
  2.     Fancy wrapper that allows you to send user messages of arbitrary length, so no 255 byte limit! :O
  3.     With the added bonus of a Lua implementation of all non-char value transfering in user messages. :3
  4.         By Overv
  5. ]]--
  6.  
  7. if ( CLIENT ) then
  8.     --[[
  9.         Custom receive system
  10.     ]]--
  11.    
  12.     local ReadString = _R.bf_read.ReadString
  13.     local ReadChar = _R.bf_read.ReadChar
  14.    
  15.     local _buffer = {}
  16.     local _index = 1
  17.    
  18.     usermessage.Hook( "UM_C", function( um )       
  19.         for i = 1, 200 do
  20.             table.insert( _buffer, ReadChar( um ) )
  21.         end
  22.     end )
  23.    
  24.     usermessage.Hook( "UM_D", function( um )
  25.         local id = ReadString( um )
  26.        
  27.         _index = 1
  28.         usermessage.IncomingMessage( id, um )
  29.        
  30.         _buffer = {}
  31.     end )
  32.  
  33.     --[[
  34.         Custom type receiving
  35.     ]]--
  36.    
  37.     function _R.bf_read:ReadChar()
  38.         _index = _index + 1
  39.         return _buffer[_index-1]
  40.     end
  41.    
  42.     function _R.bf_read:ReadAngle()
  43.         return Angle( self:ReadFloat(), self:ReadFloat(), self:ReadFloat() )
  44.     end
  45.    
  46.     function _R.bf_read:ReadBool()
  47.         return self:ReadChar() == 1
  48.     end
  49.    
  50.     function _R.bf_read:ReadEntity()
  51.         return Entity( self:ReadShort() )
  52.     end
  53.    
  54.     function _R.bf_read:ReadFloat()
  55.         local a, b, c = self:ReadChar() + 128, self:ReadChar() + 128, self:ReadChar() + 128
  56.         local e = self:ReadChar()
  57.        
  58.         local s = a * 65536 + b * 256 + c - 8388608
  59.        
  60.         if ( s > 0 ) then
  61.             return tonumber( "0." .. s ) * 10^e
  62.         else
  63.             return tonumber( "-0." .. math.abs( s ) ) * 10^e
  64.         end
  65.     end
  66.    
  67.     function _R.bf_read:ReadLong()
  68.         local a, b, c, d = self:ReadChar() + 128, self:ReadChar() + 128, self:ReadChar() + 128, self:ReadChar() + 128
  69.         return a * 16777216 + b * 65536 + c * 256 + d - 2147483648
  70.     end
  71.    
  72.     function _R.bf_read:ReadShort()
  73.         return ( self:ReadChar() + 128 ) * 256 + self:ReadChar() + 128 - 32768
  74.     end
  75.    
  76.     function _R.bf_read:ReadString()
  77.         local s, b = "", self:ReadChar()
  78.        
  79.         while ( b != 0 ) do
  80.             s = s .. string.char( b + 128 )
  81.             b = self:ReadChar()
  82.         end
  83.        
  84.         return s
  85.     end
  86.    
  87.     function _R.bf_read:ReadVector()
  88.         return Vector( self:ReadFloat(), self:ReadFloat(), self:ReadFloat() )
  89.     end
  90.    
  91.     function _R.bf_read:ReadVectorNormal()
  92.         return self:ReadVector()
  93.     end
  94. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement