/* * 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 ); } } }
/* * 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 ); }