예제 #1
0
/*
* TV_Module_LocateLocalEntities
*/
static void TV_Module_LocateLocalEntities( relay_t *relay, struct edict_s *edicts, int edict_size, int num_edicts,
										  int max_edicts )
{
	int i;

	if( !relay )
	{
		Com_Printf( "Error: TV_Module_LocateLocalEntities: Relay not set\n" );
		return;
	}

	if( !edicts || edict_size < sizeof( entity_shared_t ) )
		TV_Relay_Error( relay, "TV_Module_LocateLocalEntities: bad edicts" );

	relay->gi.local_edicts = edicts;
	relay->gi.local_edict_size = edict_size;
	relay->gi.local_num_edicts = num_edicts;
	relay->gi.local_max_edicts = max_edicts;

	for( i = 0; i < tv_maxclients->integer; i++ )
	{
		if( tvs.clients[i].relay == relay )
		{
			tvs.clients[i].edict = LOCAL_EDICT_NUM( relay, i );
		}
	}
}
예제 #2
0
/*
* TV_Relay_ClientConnect
*/
void TV_Relay_ClientConnect( relay_t *relay, client_t *client ) {
	int edictnum;

	assert( relay );
	assert( relay->module_export );
	assert( client );

	edictnum = client - tvs.clients;
	client->edict = LOCAL_EDICT_NUM( relay, edictnum );
	client->relay = relay;

	relay->module_export->ClientConnect( relay->module, client->edict, client->userinfo );
	relay->num_active_specs++;

	// update the upstream name to "name (no_of_players)"
	TV_Relay_UpstreamUserinfoChanged( relay );

	// parse some info from the info strings
	TV_Downstream_UserinfoChanged( client );
}