Beispiel #1
0
void G_CheckMenDown(void)
{
	int       alive[2], dead[2];
	gentity_t *ent;
	int       i, team;

	memset(dead, 0, sizeof(dead));
	memset(alive, 0, sizeof(alive));

	for (i = 0, ent = g_entities; i < level.maxclients; i++, ent++)
	{
		if (!ent->client || !ent->inuse)
		{
			break;
		}

		// don't want spectators
		if (ent->client->sess.sessionTeam < TEAM_AXIS ||
		    ent->client->sess.sessionTeam > TEAM_ALLIES)
		{
			continue;
		}

		team = ent->client->sess.sessionTeam == TEAM_AXIS ? 0 : 1;

		if (ent->health <= 0)
		{
			dead[team]++;
		}
		else
		{
			alive[team]++;
		}
	}

	if (dead[0] + alive[0] >= 4 && (dead[0] >= ((dead[0] + alive[0]) * 0.75f)))
	{
		G_SendSystemMessage(SM_LOST_MEN, TEAM_AXIS);
	}

	if (dead[1] + alive[1] >= 4 && (dead[1] >= ((dead[1] + alive[1]) * 0.75f)))
	{
		G_SendSystemMessage(SM_LOST_MEN, TEAM_ALLIES);
	}
}
Beispiel #2
0
void G_CheckForNeededClasses(void)
{
	qboolean   playerClasses[NUM_PLAYER_CLASSES - 1][2];
	int        i, team, cnt;
	int        teamCounts[2];
	gentity_t  *ent;
	static int lastcheck;

	memset(playerClasses, 0, sizeof(playerClasses));
	memset(teamCounts, 0, sizeof(teamCounts));

	if (lastcheck && (level.time - lastcheck) < 60000)
	{
		return;
	}

	lastcheck = level.time;


	for (i = 0, ent = g_entities; i < level.maxclients; i++, ent++)
	{
		if (!ent->client || !ent->inuse)
		{
			break;
		}

		// don't want spectators
		if (ent->client->sess.sessionTeam < TEAM_AXIS ||
		    ent->client->sess.sessionTeam > TEAM_ALLIES)
		{
			continue;
		}

		team = ent->client->sess.sessionTeam == TEAM_AXIS ? 0 : 1;

		if (ent->client->sess.playerType != PC_SOLDIER)
		{
			playerClasses[ent->client->sess.playerType - 1][team] = qtrue;
		}

		teamCounts[team]++;
	}

	// ALLIES
	if (teamCounts[1] > 3)
	{
		if (!playerClasses[PC_ENGINEER - 1])
		{
			playerClasses[PC_ENGINEER - 1][0] = G_NeedEngineers(TEAM_ALLIES) ? 0 : 1;
		}

		cnt = 0;
		for (i = 0; i < NUM_PLAYER_CLASSES; i++)
		{
			if (!playerClasses[i][0])
			{
				cnt++;
			}
		}

		if (cnt != 0)
		{
			cnt = rand() % cnt;

			for (i = 0; i < NUM_PLAYER_CLASSES; i++)
			{
				if (!playerClasses[i][0])
				{
					if (cnt-- == 0)
					{
						G_SendSystemMessage(SM_NEED_MEDIC + i, TEAM_AXIS);
					}
				}
			}
		}
	}

	// AXIS
	if (teamCounts[0] > 3)
	{
		if (!playerClasses[PC_ENGINEER - 1])
		{
			playerClasses[PC_ENGINEER - 1][1] = G_NeedEngineers(TEAM_AXIS) ? 0 : 1;
		}

		cnt = 0;
		for (i = 0; i < NUM_PLAYER_CLASSES; i++)
		{
			if (!playerClasses[i][1])
			{
				cnt++;
			}
		}

		if (cnt != 0)
		{
			cnt = rand() % cnt;

			for (i = 0; i < NUM_PLAYER_CLASSES; i++)
			{
				if (!playerClasses[i][1])
				{
					if (cnt-- == 0)
					{
						G_SendSystemMessage(SM_NEED_MEDIC + i, TEAM_ALLIES);
					}
				}
			}
		}
	}
}