From 296c7e0aabba6a52fab753dcb6565a22cc83df97 Mon Sep 17 00:00:00 2001
From: MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>
Date: Wed, 15 Sep 2010 16:04:04 +0300
Subject: [PATCH] Add a cvar to allow forcing the player in a given team in
 campaign mode. Necessary at least for my campaign.

---
 data/defaultVoretournament.cfg |  1 +
 data/qcsrc/server/teamplay.qc  | 23 +++++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/data/defaultVoretournament.cfg b/data/defaultVoretournament.cfg
index 0b05436e..750056b8 100644
--- a/data/defaultVoretournament.cfg
+++ b/data/defaultVoretournament.cfg
@@ -892,6 +892,7 @@ set quit_and_redirect ""	"set to an IP to redirect all players at the end of the
 
 // singleplayer campaign
 set g_campaign 0
+set g_campaign_forceteam 0 "Forces the player to a given team in campaign mode, 1 = red, 2 = blue, 3 = yellow, 4 = pink"
 set g_campaign_changelevel 0 "When disabled, levels won't be automatically change after a match was won or lost (you're taken back to the menu instead)"
 seta g_campaign_name "voretournament"
 set g_campaign_skill 0
diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc
index b2f8fbf0..297cdb1e 100644
--- a/data/qcsrc/server/teamplay.qc
+++ b/data/qcsrc/server/teamplay.qc
@@ -827,6 +827,29 @@ float JoinBestTeam(entity pl, float only_return_best, float forcebestteam)
 	// find out what teams are available
 	CheckAllowedTeams(pl);
 
+	// if we want the player in a certain team for campaign, force him there
+	if(cvar("g_campaign"))
+	if(clienttype(pl) == CLIENTTYPE_REAL) // only players, not bots
+	{
+		switch(cvar("g_campaign_forceteam"))
+		{
+			case 1:
+				SetPlayerColors(pl, COLOR_TEAM1 - 1);
+				return COLOR_TEAM1;
+			case 2:
+				SetPlayerColors(pl, COLOR_TEAM2 - 1);
+				return COLOR_TEAM2;
+			case 3:
+				SetPlayerColors(pl, COLOR_TEAM3 - 1);
+				return COLOR_TEAM3;
+			case 4:
+				SetPlayerColors(pl, COLOR_TEAM4 - 1);
+				return COLOR_TEAM4;
+			default:
+				break;
+		}
+	}
+
 	// if we don't care what team he ends up on, put him on whatever team he entered as.
 	// if he's not on a valid team, then let other code put him on the smallest team
 	if(!forcebestteam)
-- 
2.39.5