]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Mario/respawn_delays
authorMario <mario.mario@y7mail.com>
Tue, 22 Oct 2013 13:46:04 +0000 (00:46 +1100)
committerMario <mario.mario@y7mail.com>
Tue, 22 Oct 2013 13:46:04 +0000 (00:46 +1100)
defaultXonotic.cfg
qcsrc/server/autocvars.qh
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh

index 2e0586672683370ca1362e0a17b230d37be39b80..c08452402d91564daac7734c35b85af0d31a8e14 100644 (file)
@@ -465,6 +465,7 @@ set g_spawn_furthest 1 "this amount of the spawns shall be far away from any pla
 set g_spawn_useallspawns 0 "use all spawns, e.g. also team spawns in non-teamplay, and all spawns, even enemy spawns, in teamplay"
 // 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
index 759aea6add8832d27b88c9cb413ef08f70b65ae9..b0be65d46166b7f87257fce3cb054acb24267dd5 100644 (file)
@@ -808,6 +808,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;
index 1ab2b7ab512ea82d0b7368fdec781a2124d97a73..24e8f5a528aca83bcc3b91892bc7f64a983e909a 100644 (file)
@@ -2308,7 +2308,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;
@@ -2317,6 +2317,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)
                                {
@@ -2328,6 +2330,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();
                                        }
                                }
@@ -2336,6 +2339,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;
                        }
index 63924e60fe91acd5b0fc08f29ea31cec66c3b022..4d62dc2eea5789803fd76c2e1e6368908ac9214c 100644 (file)
@@ -637,6 +637,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)
+                       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
index fe41a23fabc2f7585c3cef8a0d8bd9448b303226..8de9e26af03689f357505e4059cb422228dad61a 100644 (file)
@@ -104,6 +104,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;