// initialize all player ping times
void multi_ping_reset_players()
{
	int idx;

	// reset the pings for all players
	for(idx=0;idx<MAX_PLAYERS;idx++){
		multi_ping_reset(&Net_players[idx].s_info.ping);
	}
}
Exemple #2
0
// <server> make the given player an observer
void multi_respawn_make_observer(net_player *pl)
{	
	pl->flags |= (NETINFO_FLAG_OBSERVER | NETINFO_FLAG_OBS_PLAYER);		
	pl->flags &= ~(NETINFO_FLAG_RESPAWNING | NETINFO_FLAG_LIMBO);

	// MWA 6/3/98 -- don't set to high -- let it default to whatever player chose 
	//pl->p_info.options.obj_update_level = OBJ_UPDATE_HIGH;
	pl->last_heard_time = timer_get_fixed_seconds();	

	// reset the ping time for this player
	multi_ping_reset(&pl->s_info.ping);
	
	// timestamp his last_full_update_time
	pl->s_info.last_full_update_time = timestamp(0);

	// create an observer object for him
	multi_obs_create_observer(pl);		
}
Exemple #3
0
// create a _permanent_ observer player 
int multi_obs_create_player(int player_num, char* name, net_addr* addr, player* pl)
{
	// blast the player struct
	memset(&Net_players[player_num], 0, sizeof(net_player));

	// Net_players[player_num].flags |= (NETINFO_FLAG_CONNECTED | NETINFO_FLAG_OBSERVER);	
	// DOH!!! The lack of this caused many bugs. 
	Net_players[player_num].flags = (NETINFO_FLAG_DO_NETWORKING | NETINFO_FLAG_OBSERVER);
	// memcpy(&Net_players[player_num].p_info.addr, addr, sizeof(net_addr));	
	Net_players[player_num].m_player = pl;

	// 6/3/98 -- don't set observer to update high...let it be whatever player set it at.
	//Net_players[player_num].p_info.options.obj_update_level = OBJ_UPDATE_HIGH;
	// set up the net_player structure
	memset(pl, 0, sizeof(player));
	stuff_netplayer_info(&Net_players[player_num], addr, 0, pl);
	Net_players[player_num].last_heard_time = timer_get_fixed_seconds();
	Net_players[player_num].reliable_socket = INVALID_SOCKET;
	Net_players[player_num].s_info.kick_timestamp = -1;
	Net_players[player_num].s_info.voice_token_timestamp = -1;
	Net_players[player_num].s_info.tracker_security_last = -1;
	Net_players[player_num].s_info.target_objnum = -1;
	Net_players[player_num].s_info.accum_buttons = 0;

	// reset the ping for this player
	multi_ping_reset(&Net_players[player_num].s_info.ping);

	// timestamp his last_full_update_time
	Net_players[player_num].s_info.last_full_update_time = timestamp(0);
	Net_players[player_num].m_player->objnum = -1;

	// nil his file xfer handle
	Net_players[player_num].s_info.xfer_handle = -1;

	// zero out his object update and control info sequencing data
	Net_players[player_num].client_cinfo_seq = 0;
	Net_players[player_num].client_server_seq = 0;

	// his kick timestamp
	Net_players[player_num].s_info.kick_timestamp = -1;

	// nil his data rate timestamp stuff
	Net_players[player_num].s_info.rate_stamp = -1;
	Net_players[player_num].s_info.rate_bytes = 0;

	// nil packet buffer stuff
	Net_players[player_num].s_info.unreliable_buffer_size = 0;
	Net_players[player_num].s_info.reliable_buffer_size = 0;

	// callsign and short callsign
	strcpy_s(pl->callsign, name);
	pilot_set_short_callsign(pl, SHORT_CALLSIGN_PIXEL_W);
	pl->flags |= PLAYER_FLAGS_STRUCTURE_IN_USE;

	Net_players[player_num].sv_bytes_sent = 0;
	Net_players[player_num].sv_last_pl = -1;
	Net_players[player_num].cl_bytes_recvd = 0;
	Net_players[player_num].cl_last_pl = -1;

	return 1;
}