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