diff --git a/src/netcode/d_clisrv.c b/src/netcode/d_clisrv.c index 7804b068f7f8d262bd7fab535539af82675bd639..bd5ec3736daa9ca33cd4595ab690cd2d433eb216 100644 --- a/src/netcode/d_clisrv.c +++ b/src/netcode/d_clisrv.c @@ -1275,7 +1275,7 @@ static void UpdatePingTable(void) } } -static void IdleUpdate(void) +static void IdleUpdate(boolean updatequittime) { INT32 i; if (!server || !netgame) @@ -1297,7 +1297,18 @@ static void IdleUpdate(void) } } else + { players[i].lastinputtime = 0; + + if (updatequittime && players[i].quittime) + { + players[i].quittime++; + + if (server && players[i].quittime >= (tic_t)FixedMul(cv_rejointimeout.value, 60 * TICRATE) + && !(players[i].quittime % TICRATE)) + SendKick(i, KICK_MSG_PLAYER_QUIT); + } + } } } @@ -1333,7 +1344,7 @@ void NetKeepAlive(void) GetPackets(); - IdleUpdate(); + IdleUpdate(true); #ifdef MASTERSERVER MasterClient_Ticker(); @@ -1455,7 +1466,7 @@ void NetUpdate(void) GetPackets(); // get packet from client or from server - IdleUpdate(); + IdleUpdate(false); // The client sends the command after receiving from the server // The server sends it before because this is better in single player