Index: code/game/g_main.c =================================================================== --- code/game/g_main.c (revision 1053) +++ code/game/g_main.c (working copy) @@ -1189,7 +1189,7 @@ ================= */ void CheckIntermissionExit( void ) { - int ready, notReady; + int ready, notReady, playerCount; int i; gclient_t *cl; int readyMask; @@ -1202,8 +1202,9 @@ ready = 0; notReady = 0; readyMask = 0; + playerCount = 0; for (i=0 ; i< g_maxclients.integer ; i++) { - cl = level.clients + i; + cl = level.clients + i; if ( cl->pers.connected != CON_CONNECTED ) { continue; } @@ -1211,6 +1212,7 @@ continue; } + playerCount++; if ( cl->readyToExit ) { ready++; if ( i < 16 ) { @@ -1236,16 +1238,21 @@ return; } - // if nobody wants to go, clear timer - if ( !ready ) { - level.readyToExit = qfalse; - return; - } + // 070331 mis - empty or bot only servers make the server + // hang indefinitely in the intermission, so execute the + // logic below only if there are any *real* players here. + if ( playerCount > 0 ) { + // if nobody wants to go, clear timer + if ( !ready ) { + level.readyToExit = qfalse; + return; + } - // if everyone wants to go, go now - if ( !notReady ) { - ExitLevel(); - return; + // if everyone wants to go, go now + if ( !notReady ) { + ExitLevel(); + return; + } } // the first person to ready starts the ten second timeout