Exemple #1
0
void CGameStats::RemovePlayer(int plr, bool keep)
{
	SGetTime time(m_roundStart);
	
	if(DEBUG_VERBOSE)
		CryLog("CGameStats::RemovePlayer %08X %s", plr, keep?"keep":"");
	PlayerStatsMap::iterator it = m_playerMap.find(plr);

	if(it == m_playerMap.end())
		return;

	if(m_statsTrack && m_playing)
	{
		SubmitPlayerStats(it->second, gEnv->bServer, false);
		m_statsTrack->PlayerDisconnected(it->second.id);
	}
	it->second.stats.push_back( new SPlayerStats(time) );

	if(!keep)
	{
		m_stateChanged = true;

		int num_players = m_playerMap.size();

		m_playerMap.erase(it);

		Report();

		if(m_serverReport && num_players == gEnv->pConsole->GetCVar("sv_maxplayers")->GetIVal())//if server was full, report now
		{
			m_serverReport->Update();
			m_stateChanged = false;
		}
	}
}
Exemple #2
0
void SMOnlineStats::SendStats()
{
	unsigned int ID;
	GameStats* stats;

	while (!m_gamesSend.empty())
	{
		stats = m_gamesSend.front();
		m_gamesSend.pop();

		if (stats->m_pStats.size() > 0)
		{
			if (!GetSongID(stats->m_song.m_song, ID))
				SubmitNewSong(stats->m_song.m_song);
				
			if (!GetSongID(stats->m_song.m_song, ID))
			{
				m_gamesResend.push(stats);
				continue;
			}

			stats->m_song.ID = ID;
			IncrementSongPlayCount(ID, 1);

			if (SubmitNewRound(*stats))
				SubmitPlayerStats(*stats);

			SubmitPlayerTotals(*stats);
		}

		SAFE_DELETE(stats);
	}
}
Exemple #3
0
void CGameStats::EndGame(bool server)
{
		if(!server && gEnv->bServer)//we simply ignore client events on server
		return;

	if(m_statsTrack && m_playing)
	{
		SGetTime time(m_roundStart);
	
		if(gEnv->bServer)
			SubmitServerStats();
		for(PlayerStatsMap::iterator it = m_playerMap.begin(), eit = m_playerMap.end();it!=eit; ++it)
		{
			SubmitPlayerStats(it->second, gEnv->bServer, it->first == CCryAction::GetCryAction()->GetClientActorId());
			it->second.stats.push_back( new SPlayerStats(time) );
		}
		m_statsTrack->EndGame();
	}

	m_playing = false;
	
  ReportGame();

	if(m_serverReport)
		m_serverReport->Update();
}