diff options
Diffstat (limited to 'src/server/sv_main.c')
-rw-r--r-- | src/server/sv_main.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/server/sv_main.c b/src/server/sv_main.c index 8d75d55f..860a0cdb 100644 --- a/src/server/sv_main.c +++ b/src/server/sv_main.c @@ -176,6 +176,9 @@ void QDECL SV_SendServerCommand(client_t *cl, const char *fmt, ...) { client_t *client; int j; + if (cl && cl->isPlaceholder) + return; + va_start (argptr,fmt); Q_vsnprintf ((char *)message, sizeof(message), fmt,argptr); va_end (argptr); @@ -200,6 +203,8 @@ void QDECL SV_SendServerCommand(client_t *cl, const char *fmt, ...) { // send the data to all relevent clients for (j = 0, client = svs.clients; j < sv_maxclients->integer ; j++, client++) { + if (client->isPlaceholder) + continue; SV_AddServerCommand( client, (char *)message ); } } @@ -851,6 +856,8 @@ void SV_PacketEvent( netadr_t from, msg_t *msg ) { if (cl->state == CS_FREE) { continue; } + if (cl->isPlaceholder) + continue; if ( !NET_CompareBaseAdr( from, cl->netchan.remoteAddress ) ) { continue; } @@ -908,22 +915,25 @@ static void SV_CalcPings( void ) { continue; } - total = 0; - count = 0; - for ( j = 0 ; j < PACKET_BACKUP ; j++ ) { - if ( cl->frames[j].messageAcked <= 0 ) { - continue; + if (!cl->isPlaceholder) + { + total = 0; + count = 0; + for ( j = 0 ; j < PACKET_BACKUP ; j++ ) { + if ( cl->frames[j].messageAcked <= 0 ) { + continue; + } + delta = cl->frames[j].messageAcked - cl->frames[j].messageSent; + count++; + total += delta; } - delta = cl->frames[j].messageAcked - cl->frames[j].messageSent; - count++; - total += delta; - } - if (!count) { - cl->ping = 999; - } else { - cl->ping = total/count; - if ( cl->ping > 999 ) { + if (!count) { cl->ping = 999; + } else { + cl->ping = total/count; + if ( cl->ping > 999 ) { + cl->ping = 999; + } } } @@ -956,6 +966,9 @@ static void SV_CheckTimeouts( void ) { zombiepoint = svs.time - 1000 * sv_zombietime->integer; for (i=0,cl=svs.clients ; i < sv_maxclients->integer ; i++,cl++) { + if (cl->isPlaceholder) + continue; + // message times may be wrong across a changelevel if (cl->lastPacketTime > svs.time) { cl->lastPacketTime = svs.time; |