// Globals that we are going to use local pairs = pairs local unpack = unpack local Msg = Msg local umsg = umsg /* This is merely a convenience function. If you pass numbers using this they're always sent as long. Which sucks if you're sending numbers that are always under 100 etc. */ function SendUserMessage( name, ply, ... ) umsg.Start( name, ply ) for k, v in pairs( {...} ) do local t = type( v ) if ( t == "string" ) then umsg.String( v ) elseif ( IsEntity( v ) ) then umsg.Entity( v ) elseif ( t == "number" ) then umsg.Long( v ) elseif ( t == "Vector" ) then umsg.Vector( v ) elseif ( t == "Angle" ) then umsg.Angle( v ) elseif ( t == "boolean" ) then umsg.Bool( v ) else ErrorNoHalt( "SendUserMessage: Couldn't send type "..t.."\n" ) end end umsg.End() end /*--------------------------------------------------------- Name: usermessage Desc: Enables the server to send the client messages (in a bandwidth friendly manner) ---------------------------------------------------------*/ module("usermessage") local Hooks = {} /*--------------------------------------------------------- Name: GetTable Desc: Returns the table of hooked usermessages ---------------------------------------------------------*/ function GetTable() return Hooks end /*--------------------------------------------------------- Name: Hook Desc: Adds a hook ---------------------------------------------------------*/ function Hook( messagename, func, ... ) if ( SERVER ) then umsg.PoolString( messagename ) return end Hooks[ messagename ] = {} Hooks[ messagename ].Function = func Hooks[ messagename ].PreArgs = {...} end /*--------------------------------------------------------- Name: Call( name, args ) Desc: Called by the engine to call a gamemode hook ---------------------------------------------------------*/ function IncomingMessage( MessageName, msg ) if ( Hooks[ MessageName ] ) then Hooks[ MessageName ].Function( msg, unpack(Hooks[ MessageName ].PreArgs) ) return end Msg("Warning: Unhandled usermessage '"..MessageName.."'\n") end