]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add a new option for forced respawn: g_respawn_delay_max. Forces players to spawn...
authorMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 00:46:06 +0000 (10:46 +1000)
committerMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 00:46:06 +0000 (10:46 +1000)
defaultXonotic.cfg
qcsrc/server/autocvars.qh
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh

index 66ac0b20b23ce711a0efa48b3f022781676ecbe1..a17484ad1e4fc5243e6ede4e1e16e9f948c7051b 100644 (file)
@@ -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
index dead5a9d4b360d924a0642f4b21fe0161e734ccd..06cc7bba0b9df39db4b55fdd64d50ae4ce225c5a 100644 (file)
@@ -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;
index 036bb45fb6dc48f029212faead961db052d00d12..949e09251ba1daf26572c0306b5c710344de7acb 100644 (file)
@@ -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;
                        }
index 68a2de343901fba60b3c926e7a9a42121cc68e69..feb63e8472cb54b80a24082a85dd55fb7adc1028 100644 (file)
@@ -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
index 7d3585725d2544ecd4dab000d907c51cbab6354e..ee9aa325f627b13d355fa01b3c3e74812d2e2ce0 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;