From 44eeebad0b4c7f6072ea7b1a857f068b68a91355 Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 9 Aug 2008 12:15:49 +0000 Subject: [PATCH] new cvar g_race_teams git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4070 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 1 + data/qcsrc/common/mapinfo.qc | 10 +++++++++- data/qcsrc/server/race.qc | 2 +- data/qcsrc/server/race.qh | 1 + data/qcsrc/server/scores_rules.qc | 11 +++++++++-- data/qcsrc/server/teamplay.qc | 15 ++++++++++++++- 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 2ee45350f..4e920bad0 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -489,6 +489,7 @@ set g_race 0 set g_race_qualifying 0 // Qualifying uses timelimit, and the one with the best time wins. Fraglimit is nonfunctional then. // Normal race uses fraglimit as a limit for the laps. +set g_race_teams 0 // when 2, 3, or 4, the race is played as a team game (the team members can add up their laps) // server game balance settings set g_balance_armor_regen 0 diff --git a/data/qcsrc/common/mapinfo.qc b/data/qcsrc/common/mapinfo.qc index cea446bd7..0e3fcd4c6 100644 --- a/data/qcsrc/common/mapinfo.qc +++ b/data/qcsrc/common/mapinfo.qc @@ -510,6 +510,14 @@ void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType) cvar_set("fraglimit", sa); s = cdr(s); } + + if(pWantedType == MAPINFO_TYPE_RACE) + { + sa = car(s); if(sa == "") sa = cvar_string("fraglimit"); + if(cvar("g_race_teams")) + cvar_set("fraglimit", sa); + s = cdr(s); + } } float MapInfo_Type_FromString(string t) @@ -570,7 +578,7 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ARENA) fputs(fh, "type arena 10 20\n"); if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_KEYHUNT) fputs(fh, "type kh 1000 20 3\n"); if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ASSAULT) fputs(fh, "type as 20\n"); - if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE) fputs(fh, "type race 5 20 0\n"); + if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE) fputs(fh, "type race 5 20 15\n"); if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ONSLAUGHT) fputs(fh, "type ons 20\n"); fh2 = fopen(strcat("scripts/", pFilename, ".arena"), FILE_READ); diff --git a/data/qcsrc/server/race.qc b/data/qcsrc/server/race.qc index fbf016aec..e086e3814 100644 --- a/data/qcsrc/server/race.qc +++ b/data/qcsrc/server/race.qc @@ -50,7 +50,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid) s = PlayerScore_Add(e, SP_RACE_FASTEST, 0); if(!s || t < s) PlayerScore_Add(e, SP_RACE_FASTEST, t - s); - PlayerScore_Add(e, SP_RACE_LAPS, 1); + PlayerTeamScore_Add(e, SP_RACE_LAPS, ST_RACE_LAPS, 1); } float recordtime; diff --git a/data/qcsrc/server/race.qh b/data/qcsrc/server/race.qh index 3aad26efc..ee0e873be 100644 --- a/data/qcsrc/server/race.qh +++ b/data/qcsrc/server/race.qh @@ -1 +1,2 @@ void race_PreparePlayer(); +float race_teams; diff --git a/data/qcsrc/server/scores_rules.qc b/data/qcsrc/server/scores_rules.qc index 0caa5c396..ed2b6f85c 100644 --- a/data/qcsrc/server/scores_rules.qc +++ b/data/qcsrc/server/scores_rules.qc @@ -121,12 +121,19 @@ void ScoreRules_kh(float teams) } // Race stuff +#define ST_RACE_LAPS 1 #define SP_RACE_LAPS 4 #define SP_RACE_FASTEST 5 void ScoreRules_race() { - ScoreRules_basics(0, 0); - if(cvar("g_race_qualifying")) + ScoreRules_basics(race_teams, 0); + if(race_teams) + { + ScoreInfo_SetLabel_TeamScore( ST_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY); + ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY); + ScoreInfo_SetLabel_PlayerScore(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME); + } + else if(cvar("g_race_qualifying")) { ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS, "laps", 0); ScoreInfo_SetLabel_PlayerScore(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME); diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 9d68becaa..c43c07a39 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -271,7 +271,18 @@ void InitGameplayMode() cvar_set("g_race", "1"); fraglimit_override = cvar("g_race_laps_limit"); gamemode_name = "Race"; - teams_matter = 0; + + if(cvar("g_race_teams")) + { + ActivateTeamplay(); + teams_matter = 1; + race_teams = bound(2, cvar("g_race_teams"), 4); + } + else + { + race_teams = 0; + teams_matter = 0; + } ScoreRules_race(); } @@ -610,6 +621,8 @@ void CheckAllowedTeams (entity for_whom) // cover anything else by treating it like tdm with no teams spawned if(g_keyhunt) dm = kh_teams; + else if(g_race) + dm = race_teams; else dm = cvar("g_tdm_teams"); if(dm < 2) -- 2.39.2