From 2a5b32f26e0d02e8593f12a504f731a45bbe35b4 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Tue, 6 Dec 2011 14:15:03 +0100 Subject: [PATCH] -deathmatch_force_teamplay; +g_tdm_on_dm_maps --- defaultXonotic.cfg | 2 +- qcsrc/common/mapinfo.qc | 39 ++++++++++++++++++++++++++++----------- qcsrc/server/autocvars.qh | 2 +- qcsrc/server/teamplay.qc | 9 +-------- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 7c66a31a6..03573ca5d 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -711,6 +711,7 @@ seta timelimit_suddendeath 5 "number of minutes suddendeath mode lasts after all // common team values set g_tdm 0 "Team Deathmatch: the team who kills their opponents most often wins" +set g_tdm_on_dm_maps 0 "when this is set, all DM maps automatically support TDM" seta teamplay_mode 4 "default teamplay setting in team games. 1 = no friendly fire, self damage. 2 = friendly fire and self damage enabled. 3 = no friendly fire, but self damage enabled. 4 = obey the following four cvars" seta g_mirrordamage 0.700000 "for teamplay 4: mirror damage factor" @@ -721,7 +722,6 @@ seta g_friendlyfire_virtual_force 1 "for teamplay 4: apply force even though dam seta g_teamdamage_threshold 40 "for teamplay 4: threshold over which to apply mirror damage" seta g_teamdamage_resetspeed 20 "for teamplay 4: how fast player's teamdamage count decreases" -set deathmatch_force_teamplay 0 "Always play TDM instead of DM" seta g_balance_teams 0 "automatically balance out players entering instead of asking them for their preferred team" seta g_balance_teams_force 0 "automatically balance out teams when players move or disconnect" seta g_balance_teams_prevent_imbalance 0 "prevent players from changing to larger teams" diff --git a/qcsrc/common/mapinfo.qc b/qcsrc/common/mapinfo.qc index 4ec54b0f0..e44e2bc7e 100644 --- a/qcsrc/common/mapinfo.qc +++ b/qcsrc/common/mapinfo.qc @@ -78,6 +78,7 @@ float MapInfo_Cache_Retrieve(string map) MapInfo_Map_supportedGametypes = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i)); MapInfo_Map_supportedFeatures = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i)); MapInfo_Map_flags = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i)); + return 1; } @@ -830,7 +831,7 @@ float MapInfo_isRedundant(string fn, string t) } // load info about a map by name into the MapInfo_Map_* globals -float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametypeToSet) +float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, float pGametypeToSet) { string fn; string s, t; @@ -1088,16 +1089,6 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype } fclose(fh); - if(pGametypeToSet) - { - if(!(MapInfo_Map_supportedGametypes & pGametypeToSet)) - { - error("Can't select the requested game type. This should never happen as the caller should prevent it!\n"); - //_MapInfo_Map_ApplyGametypeEx("", pGametypeToSet, MAPINFO_TYPE_DEATHMATCH); - //return; - } - } - if(MapInfo_Map_title == "") MapInfo_Map_titlestring = MapInfo_Map_bspname; else if(MapInfo_isRedundant(MapInfo_Map_bspname, MapInfo_Map_title)) @@ -1111,6 +1102,32 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype dprint("Map ", pFilename, " supports no game types, ignored\n"); return 0; } +float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametypeToSet) +{ + float r = MapInfo_Get_ByName_NoFallbacks(pFilename, pAllowGenerate, pGametypeToSet); + +#ifdef SVQC + if(autocvar_g_tdm_on_dm_maps) + { + // if this is set, all DM maps support TDM too + if not(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH) + if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH) + _MapInfo_Map_ApplyGametypeEx ("", pGametypeToSet, MAPINFO_TYPE_TEAM_DEATHMATCH); + } +#endif + + if(pGametypeToSet) + { + if(!(MapInfo_Map_supportedGametypes & pGametypeToSet)) + { + error("Can't select the requested game type. This should never happen as the caller should prevent it!\n"); + //_MapInfo_Map_ApplyGametypeEx("", pGametypeToSet, MAPINFO_TYPE_DEATHMATCH); + //return; + } + } + + return r; +} float MapInfo_FindName(string s) { diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 175d6dcf1..9e1bebc03 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -61,7 +61,6 @@ float autocvar_bot_debug_goalstack; float autocvar_bot_wander_enable; float autocvar_captureleadlimit_override; #define autocvar_capturelimit_override cvar("capturelimit_override") -float autocvar_deathmatch_force_teamplay; #define autocvar_developer cvar("developer") float autocvar_developer_fteqccbugs; float autocvar_ekg; @@ -1216,3 +1215,4 @@ float autocvar_g_sandbox_object_scale_min; float autocvar_g_sandbox_object_scale_max; float autocvar_g_sandbox_object_material_velocity_min; float autocvar_g_sandbox_object_material_velocity_factor; +float autocvar_g_tdm_on_dm_maps; diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 173e6ec27..3d65d760d 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -143,12 +143,6 @@ void ReadGameCvars() if(!found) g_dm = 1; - if(g_dm && autocvar_deathmatch_force_teamplay) - { - g_dm = 0; - g_tdm = 1; - } - teamplay = 0; serverflags &~= SERVERFLAG_TEAMPLAY; } @@ -257,8 +251,7 @@ void InitGameplayMode() { game = GAME_RUNEMATCH; gamemode_name = "Rune Match"; - if(autocvar_deathmatch_force_teamplay) - ActivateTeamplay(); + // ActivateTeamplay(); fraglimit_override = autocvar_g_runematch_point_limit; leadlimit_override = autocvar_g_runematch_point_leadlimit; runematch_init(); -- 2.39.2