X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fteamplay.qc;h=262b5e98bae1a6ca4fae3df2d29a0b93f3663cf1;hp=04580e6c42eade3dc20fdfa0722dd970d93bff8f;hb=162a91bc68d7b8e58c92cb0af873871129e386a9;hpb=6af4e73de035e6bbed9ba2d60e0768c43dc66f2a diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 04580e6c4..262b5e98b 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -101,6 +101,8 @@ void WriteGameCvars() cvar_set("g_race", ftos(g_race)); cvar_set("g_nexball", ftos(g_nexball)); cvar_set("g_cts", ftos(g_cts)); + cvar_set("g_freezetag", ftos(g_freezetag)); + cvar_set("g_keepaway", ftos(g_keepaway)); } void ReadGameCvars() @@ -113,6 +115,7 @@ void ReadGameCvars() prev = cvar("gamecfg"); for(i = 0; i < 2; ++i) { +//#NO AUTOCVARS START found += (g_dm = (!found && (prev != GAME_DEATHMATCH) && cvar("g_dm"))); found += (g_tdm = (!found && (prev != GAME_TEAM_DEATHMATCH) && cvar("g_tdm"))); found += (g_domination = (!found && (prev != GAME_DOMINATION) && cvar("g_domination"))); @@ -127,6 +130,9 @@ void ReadGameCvars() found += (g_race = (!found && (prev != GAME_RACE) && cvar("g_race"))); found += (g_nexball = (!found && (prev != GAME_NEXBALL) && cvar("g_nexball"))); found += (g_cts = (!found && (prev != GAME_CTS) && cvar("g_cts"))); + found += (g_freezetag = (!found && (prev != GAME_FREEZETAG) && cvar("g_freezetag"))); + found += (g_keepaway = (!found && (prev != GAME_KEEPAWAY) && cvar("g_keepaway"))); +//#NO AUTOCVARS END if(found) break; @@ -210,9 +216,6 @@ void InitGameplayMode() fraglimit_override = cvar("fraglimit_override"); leadlimit_override = cvar("leadlimit_override"); - if(cvar("g_dodging")) - MUTATOR_ADD(dodging); - if(g_dm) { game = GAME_DEATHMATCH; @@ -320,6 +323,16 @@ void InitGameplayMode() MUTATOR_ADD(gamemode_keyhunt); } + if(g_freezetag) + { + game = GAME_FREEZETAG; + gamemode_name = "Freeze Tag"; + ActivateTeamplay(); + fraglimit_override = cvar("g_freezetag_point_limit"); + leadlimit_override = cvar("g_freezetag_point_leadlimit"); + MUTATOR_ADD(gamemode_freezetag); + } + if(g_assault) { game = GAME_ASSAULT; @@ -376,6 +389,13 @@ void InitGameplayMode() have_team_spawns = -1; // request team spawns } + if(g_keepaway) + { + game = GAME_KEEPAWAY; + gamemode_name = "Keepaway"; + MUTATOR_ADD(gamemode_keepaway); + } + if(teams_matter) entcs_init(); @@ -413,7 +433,7 @@ void InitGameplayMode() race_timelimit = cvar("timelimit"); cvar_set("fraglimit", "0"); cvar_set("leadlimit", "0"); - cvar_set("timelimit", cvar_string("g_race_qualifying_timelimit")); + cvar_set("timelimit", ftos(cvar("g_race_qualifying_timelimit"))); } else g_race_qualifying = 0; @@ -513,16 +533,10 @@ void PrintWelcomeMessage(entity pl) modifications = strcat(modifications, ", Low gravity"); if(g_cloaked) modifications = strcat(modifications, ", Cloaked"); - if(g_footsteps) - modifications = strcat(modifications, ", Steps"); if(g_grappling_hook) modifications = strcat(modifications, ", Hook"); - if(g_laserguided_missile) - modifications = strcat(modifications, ", LG missiles"); if(g_midair) modifications = strcat(modifications, ", Midair"); - if(g_vampire) - modifications = strcat(modifications, ", Vampire"); if(g_pinata) modifications = strcat(modifications, ", Pinata"); if(g_weapon_stay) @@ -716,6 +730,16 @@ void CheckAllowedTeams (entity for_whom) c1 = -1; } } + + // if player has a forced team, ONLY allow that one + if(self.team_forced == COLOR_TEAM1 && c1 >= 0) + c2 = c3 = c4 = -1; + else if(self.team_forced == COLOR_TEAM2 && c2 >= 0) + c1 = c3 = c4 = -1; + else if(self.team_forced == COLOR_TEAM3 && c3 >= 0) + c1 = c2 = c4 = -1; + else if(self.team_forced == COLOR_TEAM4 && c4 >= 0) + c1 = c2 = c3 = -1; } float PlayerValue(entity p) @@ -802,7 +826,7 @@ float FindSmallestTeam(entity pl, float ignore_pl) if(c4 >= 0) totalteams = totalteams + 1; - if(cvar("bot_vs_human") && totalteams == 1) + if((cvar("bot_vs_human") || pl.team_forced > 0) && totalteams == 1) totalteams += 1; if(totalteams <= 1) @@ -815,6 +839,8 @@ float FindSmallestTeam(entity pl, float ignore_pl) error("Too few teams available for ctf\n"); else if(g_keyhunt) error("Too few teams available for key hunt\n"); + else if(g_freezetag) + error("Too few teams available for freeze tag\n"); else error("Too few teams available for team deathmatch\n"); }