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

index d967d53d555dee2e8dd5f98b46f4c98f8ff1d9d1..5f618ceb7260d02ce6fcde04ba0b2922d32d1437 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 fac4314ca6e7b53c577b1182228f3ca612bc614e..4cf7b3626d5ae335b9b2020fbef86c3c1eec5b4a 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 1c5daa19f1eb7999d4541a8f586c2de5332e9834..cd2bea2d9c7d1a40e2c14e342bb9f1f4985b0d36 100644 (file)
@@ -634,6 +634,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 c7aebd58f500fe35862ba387133f4a5fd2da5fe4..6e286ab027dc7f1f6dded236000feae4541ae4e2 100644 (file)
@@ -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;