X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fteamplay.qc;h=d7d833a64807084bc2a02c3967dfb571f79840c3;hp=bc81c3b12e6f523edc25fcc7670be30233e47a69;hb=bf825a0dada529d1288564e23223061429d01f31;hpb=65928a27835ce92d15e743ba5d94568ee355240a diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index bc81c3b12..d7d833a64 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -13,7 +13,6 @@ void TeamchangeFrags(entity e) PlayerScore_Clear(e); } -void tdm_init(); void entcs_init(); void LogTeamchange(float player_id, float team_number, float type) @@ -56,7 +55,7 @@ void InitGameplayMode() teamplay = 0; serverflags &= ~SERVERFLAG_TEAMPLAY; - if not(cvar_value_issafe(world.fog)) + if (!cvar_value_issafe(world.fog)) { print("The current map contains a potentially harmful fog setting, ignored\n"); world.fog = string_null; @@ -83,7 +82,10 @@ void InitGameplayMode() if(g_tdm) { ActivateTeamplay(); - tdm_init(); + fraglimit_override = autocvar_g_tdm_point_limit; + leadlimit_override = autocvar_g_tdm_point_leadlimit; + MUTATOR_ADD(gamemode_tdm); + if(autocvar_g_tdm_team_spawns) have_team_spawns = -1; // request team spawns } @@ -94,6 +96,10 @@ void InitGameplayMode() fraglimit_override = autocvar_g_domination_point_limit; leadlimit_override = autocvar_g_domination_point_leadlimit; MUTATOR_ADD(gamemode_domination); + + if(autocvar_g_domination_roundbased && autocvar_g_domination_roundbased_point_limit) + fraglimit_override = autocvar_g_domination_roundbased_point_limit; + have_team_spawns = -1; // request team spawns } @@ -115,19 +121,14 @@ void InitGameplayMode() MUTATOR_ADD(gamemode_lms); } - if(g_arena) - { - fraglimit_override = autocvar_g_arena_point_limit; - leadlimit_override = autocvar_g_arena_point_leadlimit; - MUTATOR_ADD(gamemode_arena); - } - if(g_ca) { ActivateTeamplay(); fraglimit_override = autocvar_g_ca_point_limit; leadlimit_override = autocvar_g_ca_point_leadlimit; MUTATOR_ADD(gamemode_ca); + if(autocvar_g_ca_team_spawns) + have_team_spawns = -1; // request team spawns } if(g_keyhunt) @@ -144,6 +145,8 @@ void InitGameplayMode() fraglimit_override = autocvar_g_freezetag_point_limit; leadlimit_override = autocvar_g_freezetag_point_leadlimit; MUTATOR_ADD(gamemode_freezetag); + if(autocvar_g_freezetag_team_spawns) + have_team_spawns = -1; // request team spawns } if(g_assault) @@ -162,7 +165,6 @@ void InitGameplayMode() if(g_race) { - if(autocvar_g_race_teams) { ActivateTeamplay(); @@ -175,6 +177,8 @@ void InitGameplayMode() qualifying_override = autocvar_g_race_qualifying_timelimit_override; fraglimit_override = autocvar_g_race_laps_limit; leadlimit_override = 0; // currently not supported by race + + MUTATOR_ADD(gamemode_race); } if(g_cts) @@ -182,6 +186,7 @@ void InitGameplayMode() g_race_qualifying = 1; fraglimit_override = 0; leadlimit_override = 0; + MUTATOR_ADD(gamemode_cts); } if(g_nexball) @@ -192,16 +197,21 @@ void InitGameplayMode() have_team_spawns = -1; // request team spawns MUTATOR_ADD(gamemode_nexball); } - + if(g_keepaway) { MUTATOR_ADD(gamemode_keepaway); } - + if(g_invasion) { - timelimit_override = 0; // no timelimit in invasion, round based - fraglimit_override = autocvar_g_invasion_round_limit; + fraglimit_override = autocvar_g_invasion_point_limit; + if(autocvar_g_invasion_teams >= 2) + { + ActivateTeamplay(); + if(autocvar_g_invasion_team_spawns) + have_team_spawns = -1; // request team spawns + } MUTATOR_ADD(gamemode_invasion); } @@ -244,20 +254,10 @@ void InitGameplayMode() else g_race_qualifying = 0; } - - if(g_invasion) - { - maxrounds = cvar("fraglimit"); - cvar_set("fraglimit", "0"); - } if(g_race || g_cts) - { - if(g_race_qualifying) - independent_players = 1; - - ScoreRules_race(); - } + if(g_race_qualifying) + independent_players = 1; InitializeEntity(world, default_delayedinit, INITPRIO_GAMETYPE_FALLBACK); } @@ -291,9 +291,9 @@ string getwelcomemessage(void) else modifications = strcat(modifications, ", ", g_weaponarena_list, " Arena"); } - if(autocvar_g_start_weapon_laser == 0) + if(cvar("g_balance_blaster_weaponstart") == 0) modifications = strcat(modifications, ", No start weapons"); - if(autocvar_sv_gravity < 800) + if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity"))) modifications = strcat(modifications, ", Low gravity"); if(g_cloaked && !g_cts) modifications = strcat(modifications, ", Cloaked"); @@ -321,6 +321,9 @@ string getwelcomemessage(void) if (g_grappling_hook) s = strcat(s, "\n\n^3grappling hook^8 is enabled, press 'e' to use it\n"); + if (cvar("g_nades")) + s = strcat(s, "\n\n^3nades^8 are enabled, press 'g' to use them\n"); + if(cache_lastmutatormsg != autocvar_g_mutatormsg) { if(cache_lastmutatormsg) @@ -424,10 +427,7 @@ void CheckAllowedTeams (entity for_whom) else { // cover anything else by treating it like tdm with no teams spawned - if(g_race) - dm = race_teams; - else - dm = 2; + dm = 2; ret_float = dm; MUTATOR_CALLHOOK(GetTeamCount); @@ -613,7 +613,7 @@ float TeamSmallerEqThanTeam(float ta, float tb, entity e) cb -= cbb * 0.999; } } - + // keep teams alive (teams of size 0 always count as smaller, ignoring score) if(ca < 1) if(cb >= 1) @@ -684,7 +684,7 @@ float FindSmallestTeam(entity pl, float ignore_pl) GetTeamCounts(world); RandomSelection_Init(); - + t = 1; if(TeamSmallerEqThanTeam(2, t, pl)) t = 2; @@ -1002,44 +1002,3 @@ void ShufflePlayerOutOfTeam (float source_team) Damage(selected, selected, selected, 100000, DEATH_AUTOTEAMCHANGE, selected.origin, '0 0 0'); centerprint(selected, strcat("You have been moved into a different team to improve team balance\nYou are now on: ", Team_ColoredFullName(selected.team))); } - -// code from here on is just to support maps that don't have team entities -void tdm_spawnteam (string teamname, float teamcolor) -{ - entity e; - e = spawn(); - e.classname = "tdm_team"; - e.netname = teamname; - e.cnt = teamcolor; - e.team = e.cnt + 1; -} - -// spawn some default teams if the map is not set up for tdm -void tdm_spawnteams() -{ - float numteams; - - numteams = autocvar_g_tdm_teams_override; - if(numteams < 2) - numteams = autocvar_g_tdm_teams; - numteams = bound(2, numteams, 4); - - tdm_spawnteam("Red", NUM_TEAM_1-1); - tdm_spawnteam("Blue", NUM_TEAM_2-1); - if(numteams >= 3) - tdm_spawnteam("Yellow", NUM_TEAM_3-1); - if(numteams >= 4) - tdm_spawnteam("Pink", NUM_TEAM_4-1); -} - -void tdm_delayedinit() -{ - // if no teams are found, spawn defaults - if (find(world, classname, "tdm_team") == world) - tdm_spawnteams(); -} - -void tdm_init() -{ - InitializeEntity(world, tdm_delayedinit, INITPRIO_GAMETYPE); -}