entity spawnqueue_first;
entity spawnqueue_last;
entity champion;
- string champion_name;
float warmup;
-float ca_players;
-float required_ca_players;
+float ca_teams_ok;
.float caplayer;
void PutObserverInServer();
if(inWarmupStage)
allowed_to_spawn = 1;
- if(ca_players < required_ca_players)
+ if(g_ca && !ca_teams_ok)
allowed_to_spawn = 1;
- msg = NEWLINES;
if(time < warmup && !inWarmupStage)
{
if (g_ca)
{
roundStartTime_prev = f;
Announce("begin");
- centerprint(self, "^1Begin!\n");
+ FOR_EACH_PLAYER(e)
+ Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0);
if(g_ca) {
- ca_players = 0;
+ float start_red_ca_players, start_blue_ca_players;
- FOR_EACH_PLAYER(e)
- ca_players += 1;
+ FOR_EACH_PLAYER(e) {
+ if (e.team == COLOR_TEAM1)
+ start_red_ca_players += 1;
+ else if (e.team == COLOR_TEAM2)
+ start_blue_ca_players += 1;
+ }
+ // teams are ok if there's at least 1 player in each team
+ ca_teams_ok = (start_red_ca_players && start_blue_ca_players);
}
if(self.classname == "player" && self.health > 0 && self.movetype == MOVETYPE_NONE)
self.movetype = MOVETYPE_WALK;
+
}
+
+ // clear champion to avoid centerprinting again the champion msg
+ if (champion)
+ champion = world;
}
-void count_spawned_players()
+void count_players()
{
- // TODO fix "*spawned" name, it should rather be "*players" or so
- // not doing this now to prevent merge hell with Tag
- // fix after merging with Tag
-
// count amount of players in each team
- totalspawned = redspawned = bluespawned = yellowspawned = pinkspawned = 0;
+ total_players = red_players = blue_players = yellow_players = pink_players = 0;
FOR_EACH_PLAYER(self) {
if (self.team == COLOR_TEAM1)
{
*
* Gets called in StartFrame()
*/
+ float warntime;
void Spawnqueue_Check()
{
- count_spawned_players();
+ count_players();
if(g_ca || g_freezetag) // we want to perform this before the return block below (CA)...
{
count_alive_players();
return;
if(g_ca) {
- required_ca_players = max(2, fabs(autocvar_bot_vs_human + 1));
-
- if(ca_players < required_ca_players && (redspawned && bluespawned)) {
+ if(!ca_teams_ok && (red_players && blue_players)) {
reset_map(TRUE);
}
- else if(ca_players < required_ca_players) {
+ else if(!ca_teams_ok) {
- FOR_EACH_PLAYER(self)
- centerprint(self, strcat("^1Need at least 1 player in each team to play CA", "^7\n"));
+ if (time > warntime)
+ {
+ FOR_EACH_PLAYER(self)
+ Send_CSQC_Centerprint_Generic(self, CPID_ROUND_STARTING, "^1Need at least 1 player in each team to play CA", 2, 0);
+ warntime = time + 1;
+ }
return;
}
else if(!next_round) {
- if((redspawned && !bluespawned) || (bluespawned && !redspawned)) {
+ if((red_players && !blue_players) || (blue_players && !red_players)) {
next_round = time + 5;
- champion = find(world, classname, "player");
- if(champion_name)
- strunzone(champion_name);
- champion_name = strzone(champion.netname);
}
- else if((!redspawned && !bluespawned) || time - warmup > autocvar_g_ca_round_timelimit) {
+ else if((!red_players && !blue_players) || time - warmup > autocvar_g_ca_round_timelimit) {
- FOR_EACH_CLIENT(self) centerprint(self, strcat("^7Round tied.", "^7\n"));
+ FOR_EACH_CLIENT(self) centerprint(self, "^7Round tied");
next_round = time + 5;
}