--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| 	Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]


-- Globals that we are going to use
local unpack	= unpack
local Msg		= Msg

--[[
	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, ... )

	if ( CLIENT ) then return end

	umsg.Start( name, ply )

	for k, v in ipairs( { ... } ) do
		local t = TypeID( v )

		if ( t == TYPE_STRING ) then
			umsg.String( v )
		elseif ( t == TYPE_ENTITY ) then
			umsg.Entity( v )
		elseif ( t == TYPE_NUMBER ) then
			umsg.Long( v )
		elseif ( t == TYPE_VECTOR ) then
			umsg.Vector( v )
		elseif ( t == TYPE_ANGLE ) then
			umsg.Angle( v )
		elseif ( t == TYPE_BOOL ) then
			umsg.Bool( v )
		else
			ErrorNoHalt( "SendUserMessage: Couldn't send type " .. type( v ) .. "\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, ... )

	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
