return 0; // no rebalancing whatsoever please
if(!teams_matter)
return 0;
- if(cvar("g_campaign"))
+ if(autocvar_g_campaign)
return 0;
- if(cvar("bot_vs_human") && (c3==-1 && c4==-1))
+ if(autocvar_bot_vs_human && (c3==-1 && c4==-1))
return 0;
- if(!cvar("g_balance_teams_force"))
+ if(!autocvar_g_balance_teams_force)
return -1;
return 1;
}
void LogTeamchange(float player_id, float team_number, float type)
{
- if(!cvar("sv_eventlog"))
+ if(!autocvar_sv_eventlog)
return;
if(player_id < 1)
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()
float i;
found = 0;
- prev = cvar("gamecfg");
+ prev = autocvar_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")));
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;
if(!found)
g_dm = 1;
- if(g_dm && cvar("deathmatch_force_teamplay"))
+ if(g_dm && autocvar_deathmatch_force_teamplay)
{
g_dm = 0;
g_tdm = 1;
}
teams_matter = 0;
+ serverflags &~= SERVERFLAG_TEAMPLAY;
}
void default_delayedinit()
void ActivateTeamplay()
{
- float teamplay_default;
- teamplay_default = cvar("teamplay_default");
-
- if(teamplay_default)
- teamplay = teamplay_default;
- else
- teamplay = 3;
- cvar_set("teamplay", ftos(teamplay));
-
+ serverflags |= SERVERFLAG_TEAMPLAY;
teams_matter = 1;
}
VoteReset();
- teams_matter = 0;
- cvar_set("teamplay", "0");
-
// make sure only ONE type is selected
ReadGameCvars();
WriteGameCvars();
ReadGameCvars();
// set both here, gamemode can override it later
- timelimit_override = cvar("timelimit_override");
- fraglimit_override = cvar("fraglimit_override");
- leadlimit_override = cvar("leadlimit_override");
+ timelimit_override = autocvar_timelimit_override;
+ fraglimit_override = autocvar_fraglimit_override;
+ leadlimit_override = autocvar_leadlimit_override;
if(g_dm)
{
gamemode_name = "Team Deathmatch";
ActivateTeamplay();
tdm_init();
- if(cvar("g_tdm_team_spawns"))
+ if(autocvar_g_tdm_team_spawns)
have_team_spawns = -1; // request team spawns
}
game = GAME_DOMINATION;
gamemode_name = "Domination";
ActivateTeamplay();
- fraglimit_override = cvar("g_domination_point_limit");
- leadlimit_override = cvar("g_domination_point_leadlimit");
+ fraglimit_override = autocvar_g_domination_point_limit;
+ leadlimit_override = autocvar_g_domination_point_leadlimit;
dom_init();
have_team_spawns = -1; // request team spawns
}
game = GAME_CTF;
gamemode_name = "Capture the Flag";
ActivateTeamplay();
- if(cvar("g_campaign"))
- g_ctf_win_mode = 2;
- else
- g_ctf_win_mode = cvar("g_ctf_win_mode");
- g_ctf_ignore_frags = cvar("g_ctf_ignore_frags");
+ g_ctf_ignore_frags = autocvar_g_ctf_ignore_frags;
if(g_ctf_win_mode == 2)
{
- fraglimit_override = cvar("g_ctf_capture_limit");
- leadlimit_override = cvar("g_ctf_capture_leadlimit");
+ fraglimit_override = autocvar_g_ctf_capture_limit;
+ leadlimit_override = autocvar_g_ctf_capture_leadlimit;
}
else
{
- fraglimit_override = cvar("capturelimit_override");
- leadlimit_override = cvar("captureleadlimit_override");
+ fraglimit_override = autocvar_capturelimit_override;
+ leadlimit_override = autocvar_captureleadlimit_override;
}
ctf_init();
have_team_spawns = -1; // request team spawns
{
game = GAME_RUNEMATCH;
gamemode_name = "Rune Match";
- if(cvar("deathmatch_force_teamplay"))
+ if(autocvar_deathmatch_force_teamplay)
ActivateTeamplay();
- fraglimit_override = cvar("g_runematch_point_limit");
- leadlimit_override = cvar("g_runematch_point_leadlimit");
+ fraglimit_override = autocvar_g_runematch_point_limit;
+ leadlimit_override = autocvar_g_runematch_point_leadlimit;
runematch_init();
}
{
game = GAME_LMS;
gamemode_name = "Last Man Standing";
- fraglimit_override = cvar("g_lms_lives_override");
+ fraglimit_override = autocvar_g_lms_lives_override;
leadlimit_override = 0; // not supported by LMS
if(fraglimit_override == 0)
fraglimit_override = -1;
{
game = GAME_ARENA;
gamemode_name = "Arena";
- fraglimit_override = cvar("g_arena_point_limit");
- leadlimit_override = cvar("g_arena_point_leadlimit");
- maxspawned = cvar("g_arena_maxspawned");
+ fraglimit_override = autocvar_g_arena_point_limit;
+ leadlimit_override = autocvar_g_arena_point_leadlimit;
+ maxspawned = autocvar_g_arena_maxspawned;
if(maxspawned < 2)
maxspawned = 2;
- arena_roundbased = cvar("g_arena_roundbased");
+ arena_roundbased = autocvar_g_arena_roundbased;
}
if(g_ca)
game = GAME_CA;
gamemode_name = "Clan Arena";
ActivateTeamplay();
- fraglimit_override = cvar("g_ca_point_limit");
- leadlimit_override = cvar("g_ca_point_leadlimit");
+ fraglimit_override = autocvar_g_ca_point_limit;
+ leadlimit_override = autocvar_g_ca_point_leadlimit;
precache_sound("ctf/red_capture.wav");
precache_sound("ctf/blue_capture.wav");
}
game = GAME_KEYHUNT;
gamemode_name = "Key Hunt";
ActivateTeamplay();
- fraglimit_override = cvar("g_keyhunt_point_limit");
- leadlimit_override = cvar("g_keyhunt_point_leadlimit");
+ fraglimit_override = autocvar_g_keyhunt_point_limit;
+ leadlimit_override = autocvar_g_keyhunt_point_leadlimit;
MUTATOR_ADD(gamemode_keyhunt);
}
+ if(g_freezetag)
+ {
+ game = GAME_FREEZETAG;
+ gamemode_name = "Freeze Tag";
+ ActivateTeamplay();
+ fraglimit_override = autocvar_g_freezetag_point_limit;
+ leadlimit_override = autocvar_g_freezetag_point_leadlimit;
+ MUTATOR_ADD(gamemode_freezetag);
+ }
+
if(g_assault)
{
game = GAME_ASSAULT;
game = GAME_RACE;
gamemode_name = "Race";
- if(cvar("g_race_teams"))
+ if(autocvar_g_race_teams)
{
ActivateTeamplay();
- race_teams = bound(2, cvar("g_race_teams"), 4);
+ race_teams = bound(2, autocvar_g_race_teams, 4);
have_team_spawns = -1; // request team spawns
}
else
race_teams = 0;
- qualifying_override = cvar("g_race_qualifying_timelimit_override");
- fraglimit_override = cvar("g_race_laps_limit");
+ qualifying_override = autocvar_g_race_qualifying_timelimit_override;
+ fraglimit_override = autocvar_g_race_laps_limit;
leadlimit_override = 0; // currently not supported by race
}
{
game = GAME_NEXBALL;
gamemode_name = "Nexball";
- fraglimit_override = cvar("g_nexball_goallimit");
- leadlimit_override = cvar("g_nexball_goalleadlimit");
+ fraglimit_override = autocvar_g_nexball_goallimit;
+ leadlimit_override = autocvar_g_nexball_goalleadlimit;
ActivateTeamplay();
nb_init();
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();
cache_lastmutatormsg = strzone("");
// enforce the server's universal frag/time limits
- if(!cvar("g_campaign"))
+ if(!autocvar_g_campaign)
{
if(fraglimit_override >= 0)
cvar_set("fraglimit", ftos(fraglimit_override));
if(g_race)
{
// we need to find out the correct value for g_race_qualifying
- if(cvar("g_campaign"))
+ if(autocvar_g_campaign)
{
g_race_qualifying = 1;
}
- else if(!cvar("g_campaign") && cvar("g_race_qualifying_timelimit") > 0)
+ else if(!autocvar_g_campaign && autocvar_g_race_qualifying_timelimit > 0)
{
g_race_qualifying = 2;
- race_fraglimit = cvar("fraglimit");
- race_leadlimit = cvar("leadlimit");
- race_timelimit = cvar("timelimit");
+ race_fraglimit = autocvar_fraglimit;
+ race_leadlimit = autocvar_leadlimit;
+ race_timelimit = autocvar_timelimit;
cvar_set("fraglimit", "0");
cvar_set("leadlimit", "0");
- cvar_set("timelimit", cvar_string("g_race_qualifying_timelimit"));
+ cvar_set("timelimit", ftos(autocvar_g_race_qualifying_timelimit));
}
else
g_race_qualifying = 0;
string GetClientVersionMessage() {
local string versionmsg;
if (self.version_mismatch) {
- if(self.version < cvar("gameversion")) {
+ if(self.version < autocvar_gameversion) {
versionmsg = "^3Your client version is outdated.\n\n\n### YOU WON'T BE ABLE TO PLAY ON THIS SERVER ###\n\n\nPlease update!!!^8";
} else {
versionmsg = "^3This server is using an outdated Xonotic version.\n\n\n ### THIS SERVER IS INCOMPATIBLE AND THUS YOU CANNOT JOIN ###.^8";
if(self.cvar_scr_centertime == 0) return;
- if(cvar("g_campaign"))
+ if(autocvar_g_campaign)
{
if(self.classname == "player" && !self.BUTTON_INFO)
return;
}
else
{
- if((time - self.jointime) > cvar("welcome_message_time") && !self.BUTTON_INFO)
+ if((time - self.jointime) > autocvar_welcome_message_time && !self.BUTTON_INFO)
return;
}
self.welcomemessage_time = time + max(0.5, self.cvar_scr_centertime * 0.6);
}
- if(cvar("g_campaign"))
+ if(autocvar_g_campaign)
{
centerprint(pl, campaign_message);
return;
else
modifications = strcat(modifications, ", ", g_weaponarena_list, " Arena");
}
- if(cvar("g_start_weapon_laser") == 0)
+ if(autocvar_g_start_weapon_laser == 0)
modifications = strcat(modifications, ", No start weapons");
- if(cvar("sv_gravity") < 800)
+ if(autocvar_sv_gravity < 800)
modifications = strcat(modifications, ", Low gravity");
- if(g_cloaked)
+ if(g_cloaked && !g_cts)
modifications = strcat(modifications, ", Cloaked");
if(g_grappling_hook)
modifications = strcat(modifications, ", Hook");
modifications = strcat(modifications, ", Midair");
if(g_pinata)
modifications = strcat(modifications, ", Pinata");
- if(g_weapon_stay)
+ if(g_weapon_stay && !g_cts)
modifications = strcat(modifications, ", Weapons stay");
if(g_bloodloss > 0)
modifications = strcat(modifications, ", Bloodloss");
local string versionmessage;
versionmessage = GetClientVersionMessage();
- s = strcat(s, NEWLINES, "This is Xonotic ", cvar_string("g_xonoticversion"), "\n", versionmessage);
+ s = strcat(s, NEWLINES, "This is Xonotic ", autocvar_g_xonoticversion, "\n", versionmessage);
s = strcat(s, "^8\n\nmatch type is ^1", gamemode_name, "^8\n");
if(modifications != "")
if (g_grappling_hook)
s = strcat(s, "\n\n^3grappling hook^8 is enabled, press 'e' to use it\n");
- if(cache_lastmutatormsg != cvar_string("g_mutatormsg"))
+ if(cache_lastmutatormsg != autocvar_g_mutatormsg)
{
if(cache_lastmutatormsg)
strunzone(cache_lastmutatormsg);
if(cache_mutatormsg)
strunzone(cache_mutatormsg);
- cache_lastmutatormsg = strzone(cvar_string("g_mutatormsg"));
+ cache_lastmutatormsg = strzone(autocvar_g_mutatormsg);
cache_mutatormsg = strzone(cache_lastmutatormsg);
}
s = strcat(s, "\n\n^8special gameplay tips: ^7", cache_mutatormsg);
}
- motd = cvar_string("sv_motd");
+ motd = autocvar_sv_motd;
if (motd != "") {
s = strcat(s, "\n\n^8MOTD: ^7", strreplace("\\n", "\n", motd));
}
c1 = c2 = c3 = c4 = -1;
cb1 = cb2 = cb3 = cb4 = 0;
- if(cvar("g_campaign") && for_whom && clienttype(for_whom) == CLIENTTYPE_REAL)
- {
- c1 = 0; // only allow RED team for player joining
- }
- else if(g_onslaught)
+ if(g_onslaught)
{
// onslaught is special
head = findchain(classname, "onslaught_generator");
// TODO: Balance quantity of bots across > 2 teams when bot_vs_human is set (and remove next line)
if(c3==-1 && c4==-1)
- if(cvar("bot_vs_human") && for_whom)
+ if(autocvar_bot_vs_human && for_whom)
{
- if(cvar("bot_vs_human") > 0)
+ if(autocvar_bot_vs_human > 0)
{
// bots are all blue
if(clienttype(for_whom) == CLIENTTYPE_BOT)
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)
// FIXME: also find and memorize the lowest-scoring bot on each team (in case players must be shuffled around)
// also remember the lowest-scoring player
- FOR_EACH_PLAYER(head)
+ FOR_EACH_CLIENT(head)
{
+ float t;
+ if(head.classname == "player")
+ t = head.team;
+ else if(head.team_forced > 0)
+ t = head.team_forced; // reserve the spot
+ else
+ continue;
if(head != ignore)// && head.netname != "")
{
value = PlayerValue(head);
bvalue = value;
else
bvalue = 0;
- if(head.team == COLOR_TEAM1)
+ if(t == COLOR_TEAM1)
{
if(c1 >= 0)
{
cb1 = cb1 + bvalue;
}
}
- if(head.team == COLOR_TEAM2)
+ if(t == COLOR_TEAM2)
{
if(c2 >= 0)
{
cb2 = cb2 + bvalue;
}
}
- if(head.team == COLOR_TEAM3)
+ if(t == COLOR_TEAM3)
{
if(c3 >= 0)
{
cb3 = cb3 + bvalue;
}
}
- if(head.team == COLOR_TEAM4)
+ if(t == COLOR_TEAM4)
{
if(c4 >= 0)
{
}
}
}
+
+ // if the player who has a forced team has not joined yet, reserve the spot
+ if(autocvar_g_campaign)
+ {
+ switch(autocvar_g_campaign_forceteam)
+ {
+ case 1: if(c1 == cb1) ++c1; break;
+ case 2: if(c2 == cb2) ++c2; break;
+ case 3: if(c3 == cb3) ++c3; break;
+ case 4: if(c4 == cb4) ++c4; break;
+ }
+ }
}
// returns # of smallest team (1, 2, 3, 4)
if(c4 >= 0)
totalteams = totalteams + 1;
- if(cvar("bot_vs_human") && totalteams == 1)
+ if((autocvar_bot_vs_human || pl.team_forced > 0) && totalteams == 1)
totalteams += 1;
if(totalteams <= 1)
{
- if(cvar("g_campaign") && pl && clienttype(pl) == CLIENTTYPE_REAL)
+ if(autocvar_g_campaign && pl && clienttype(pl) == CLIENTTYPE_REAL)
return 1; // special case for campaign and player joining
else if(g_domination)
error("Too few teams available for domination\n");
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");
}
// 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);
- LogTeamchange(pl.playerid, pl.team, 2);
- return COLOR_TEAM1;
- case 2:
- SetPlayerColors(pl, COLOR_TEAM2 - 1);
- LogTeamchange(pl.playerid, pl.team, 2);
- return COLOR_TEAM2;
- case 3:
- SetPlayerColors(pl, COLOR_TEAM3 - 1);
- LogTeamchange(pl.playerid, pl.team, 2);
- return COLOR_TEAM3;
- case 4:
- SetPlayerColors(pl, COLOR_TEAM4 - 1);
- LogTeamchange(pl.playerid, pl.team, 2);
- 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)
return;
}
- if((cvar("g_campaign")) || (cvar("g_changeteam_banned") && self.wasplayer)) {
+ if((autocvar_g_campaign) || (autocvar_g_changeteam_banned && self.wasplayer)) {
sprint(self, "Team changes not allowed\n");
return; // changing teams is not allowed
}
- if(cvar("g_balance_teams_prevent_imbalance"))
+ if(autocvar_g_balance_teams_prevent_imbalance)
{
// only allow changing to a smaller or equal size team
{
float numteams;
- numteams = cvar("g_tdm_teams_override");
+ numteams = autocvar_g_tdm_teams_override;
if(numteams < 2)
- numteams = cvar("g_tdm_teams");
+ numteams = autocvar_g_tdm_teams;
numteams = bound(2, numteams, 4);
tdm_spawnteam("Red", COLOR_TEAM1-1);