From ede42a5d839ae7fbce8f78fe7e2d952091ad5ca4 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sat, 23 Apr 2011 20:05:04 +0200 Subject: [PATCH] when trying to spawn, and your team has no spawns on the map, BUT other teams do, then try spawning for team 0. If this also does not work, pick ANY spawn. --- qcsrc/server/cl_client.qc | 19 +++++++++++++++++-- qcsrc/server/defs.qh | 2 +- qcsrc/server/miscfunctions.qc | 3 +-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 4f9264466..9e704b882 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -328,13 +328,28 @@ entity SelectSpawnPoint (float anypoint) if(anypoint) teamcheck = -1; else if(have_team_spawns > 0) - teamcheck = self.team; // MUST be team - else if(have_team_spawns == 0 && have_noteam_spawns) + { + if(have_team_spawns_forteam[self.team] == 0) + { + // we request a spawn for a team, and we have team + // spawns, but that team has no spawns? + if(have_team_spawns[0]) + // try noteam spawns + teamcheck = 0; + else + // if not, any spawn has to do + teamcheck = -1; + } + else + teamcheck = self.team; // MUST be team + } + else if(have_team_spawns == 0 && have_team_spawns[0]) teamcheck = 0; // MUST be noteam else teamcheck = -1; // if we get here, we either require team spawns but have none, or we require non-team spawns and have none; use any spawn then + // get the list of players playerlist = findchain(classname, "player"); // get the entire list of spots diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index d7179fafe..cf13fee2c 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -410,7 +410,7 @@ float TemporaryDB; float some_spawn_has_been_used; float have_team_spawns; // 0 = no team spawns requested, -1 = team spawns requested but none found, 1 = team spawns requested and found -float have_noteam_spawns; // 0 = no no-team spawns, 1 = no-team spawns exist +float have_team_spawns_forteam[17]; // 0 = this team has no spawns, 1 = this team has spawns; team 0 is the "no-team" // set when showing a kill countdown .entity killindicator; diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 84dd07d94..0c8162b54 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -236,8 +236,7 @@ void relocate_spawnpoint() if (have_team_spawns != 0) if (self.team) have_team_spawns = 1; - if (!self.team) - have_noteam_spawns = 1; + have_team_spawns_forteam[self.team] = 1; if (autocvar_r_showbboxes) { -- 2.39.2