From b0b22b53d6a99f7a40f386e85e580e4de4866cde Mon Sep 17 00:00:00 2001
From: Louis-Antoine <lamr@free.fr>
Date: Thu, 23 Jan 2020 19:58:13 +0100
Subject: [PATCH] Ignore disconnected players in tag gametypes

Disconnected players do not become IT at round start.

If all non-ITs are disconnected, the round ends.

If all ITs are disconnected, one of the non-ITs
becomes IT, or the round ends if in Hide & Seek.
---
 src/p_inter.c | 4 ++--
 src/p_setup.c | 2 +-
 src/p_tick.c  | 4 ++++
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/p_inter.c b/src/p_inter.c
index 71dcd70a1d..8090b7406f 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -2257,9 +2257,9 @@ void P_CheckSurvivors(void)
 		{
 			if (players[i].spectator)
 				spectators++;
-			else if (players[i].pflags & PF_TAGIT)
+			else if ((players[i].pflags & PF_TAGIT) && players[i].quittime < 30 * TICRATE)
 				taggers++;
-			else if (!(players[i].pflags & PF_GAMETYPEOVER))
+			else if (!(players[i].pflags & PF_GAMETYPEOVER) && players[i].quittime < 30 * TICRATE)
 			{
 				survivorarray[survivors] = i;
 				survivors++;
diff --git a/src/p_setup.c b/src/p_setup.c
index 679060d443..729ee00c22 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3097,7 +3097,7 @@ static void P_InitTagGametype(void)
 	//Also, you'd never have to loop through all 32 players slots to find anything ever again.
 	for (i = 0; i < MAXPLAYERS; i++)
 	{
-		if (playeringame[i] && !players[i].spectator)
+		if (playeringame[i] && !(players[i].spectator && players[i].quittime))
 		{
 			playersactive[realnumplayers] = i; //stores the player's node in the array.
 			realnumplayers++;
diff --git a/src/p_tick.c b/src/p_tick.c
index 4dd3bb30a8..a4b8aa0971 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -599,6 +599,10 @@ void P_Ticker(boolean run)
 			if (players[i].quittime)
 			{
 				players[i].quittime++;
+
+				if (players[i].quittime == 30 * TICRATE)
+					P_CheckSurvivors();
+
 				if (server && players[i].quittime >= FixedMul(cv_rejointimeout.value, 60 * TICRATE))
 					SendKick(i, KICK_MSG_PLAYER_QUIT);
 			}
-- 
GitLab