From 875bc33bc27bf52c8f05bdc77280706a166ba3db Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 6 Jun 2013 10:46:06 +1000 Subject: [PATCH] Add a new option for forced respawn: g_respawn_delay_max. Forces players to spawn after this many seconds or optionally respawn after normal delay --- defaultXonotic.cfg | 1 + qcsrc/server/autocvars.qh | 1 + qcsrc/server/cl_client.qc | 7 ++++++- qcsrc/server/cl_player.qc | 4 ++++ qcsrc/server/defs.qh | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 66ac0b20b..a17484ad1 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -475,6 +475,7 @@ set g_spawn_near_teammate 0 "if set, players prefer spawns near a team mate" set g_spawn_near_teammate_distance 640 "max distance to consider a spawn to be near a team mate" // respawn delay set g_respawn_delay 2 "number of seconds you have to wait before you can respawn again" +set g_respawn_delay_max 5 "number of seconds you can wait before you're forced to respawn (only effective with g_forced_respawn 1)" set g_respawn_waves 0 "respawn in waves (every n seconds), intended to decrease overwhelming base attacks" // overtime diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index dead5a9d4..06cc7bba0 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -810,6 +810,7 @@ float autocvar_g_domination_point_leadlimit; float autocvar_g_domination_point_rate; float autocvar_g_domination_teams_override; float autocvar_g_forced_respawn; +float autocvar_g_respawn_delay_max; string autocvar_g_forced_team_blue; string autocvar_g_forced_team_otherwise; string autocvar_g_forced_team_pink; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 036bb45fb..949e09251 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -2311,7 +2311,7 @@ void PlayerPreThink (void) if (self.deadflag == DEAD_DYING) { - if(self.respawn_flags & RESPAWN_FORCE) + if(self.respawn_flags & RESPAWN_FORCE && !autocvar_g_respawn_delay_max) self.deadflag = DEAD_RESPAWNING; else if(!button_pressed) self.deadflag = DEAD_DEAD; @@ -2320,6 +2320,8 @@ void PlayerPreThink (void) { if(button_pressed) self.deadflag = DEAD_RESPAWNABLE; + else if(time >= self.respawn_time_max && self.respawn_flags & RESPAWN_FORCE) + self.deadflag = DEAD_RESPAWNING; } else if (self.deadflag == DEAD_RESPAWNABLE) { @@ -2331,6 +2333,7 @@ void PlayerPreThink (void) if(time > self.respawn_time) { self.respawn_time = time + 1; // only retry once a second + self.respawn_time_max = self.respawn_time; respawn(); } } @@ -2339,6 +2342,8 @@ void PlayerPreThink (void) if(self.respawn_flags & RESPAWN_SILENT) self.stat_respawn_time = 0; + else if(self.respawn_flags & RESPAWN_FORCE && autocvar_g_respawn_delay_max) + self.stat_respawn_time = self.respawn_time_max; else self.stat_respawn_time = self.respawn_time; } diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 68a2de343..feb63e847 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -650,6 +650,10 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht self.respawn_time = ceil((time + sdelay) / waves) * waves; else self.respawn_time = time + sdelay; + if(autocvar_g_respawn_delay_max) + self.respawn_time_max = time + autocvar_g_respawn_delay_max; + else + self.respawn_time_max = self.respawn_time; if((sdelay + waves >= 5.0) && (self.respawn_time - time > 1.75)) self.respawn_countdown = 10; // first number to count down from is 10 else diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 7d3585725..ee9aa325f 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -103,6 +103,7 @@ float server_is_dedicated; .float play_time; .float respawn_flags; .float respawn_time; +.float respawn_time_max; .float death_time; .float fade_time; .float fade_rate; -- 2.39.2