X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fteamplay.qc;h=9cb52c1daa2444053ea8e6fbe2d344127f4197ad;hp=83c494d0982ea0c6f252d44c57508a5b6dee8791;hb=1344c0077c314df68fb216041a8e042ce33064ab;hpb=1670a79d57800df804fc80f2723664ec5a699783 diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 83c494d098..9cb52c1daa 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -150,6 +150,7 @@ void ReadGameCvars() } teams_matter = 0; + serverflags &~= SERVERFLAG_TEAMPLAY; } void default_delayedinit() @@ -172,8 +173,6 @@ void InitGameplayMode() VoteReset(); - teams_matter = 0; - // make sure only ONE type is selected ReadGameCvars(); WriteGameCvars(); @@ -239,7 +238,6 @@ void InitGameplayMode() game = GAME_CTF; gamemode_name = "Capture the Flag"; ActivateTeamplay(); - g_ctf_win_mode = autocvar_g_ctf_win_mode; g_ctf_ignore_frags = autocvar_g_ctf_ignore_frags; if(g_ctf_win_mode == 2) { @@ -519,7 +517,7 @@ void PrintWelcomeMessage(entity pl) modifications = strcat(modifications, ", No start weapons"); 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"); @@ -527,7 +525,7 @@ void PrintWelcomeMessage(entity pl) 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"); @@ -745,8 +743,15 @@ void GetTeamCounts(entity ignore) // 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); @@ -754,7 +759,7 @@ void GetTeamCounts(entity ignore) bvalue = value; else bvalue = 0; - if(head.team == COLOR_TEAM1) + if(t == COLOR_TEAM1) { if(c1 >= 0) { @@ -762,7 +767,7 @@ void GetTeamCounts(entity ignore) cb1 = cb1 + bvalue; } } - if(head.team == COLOR_TEAM2) + if(t == COLOR_TEAM2) { if(c2 >= 0) { @@ -770,7 +775,7 @@ void GetTeamCounts(entity ignore) cb2 = cb2 + bvalue; } } - if(head.team == COLOR_TEAM3) + if(t == COLOR_TEAM3) { if(c3 >= 0) { @@ -778,7 +783,7 @@ void GetTeamCounts(entity ignore) cb3 = cb3 + bvalue; } } - if(head.team == COLOR_TEAM4) + if(t == COLOR_TEAM4) { if(c4 >= 0) { @@ -788,6 +793,18 @@ void GetTeamCounts(entity ignore) } } } + + // 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) @@ -892,33 +909,6 @@ 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(autocvar_g_campaign) - if(clienttype(pl) == CLIENTTYPE_REAL) // only players, not bots - { - switch(autocvar_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)