diff --git a/source/src/server.h b/source/src/server.h index e34cbb04..efb0bed2 100644 --- a/source/src/server.h +++ b/source/src/server.h @@ -294,6 +294,7 @@ struct client // server side version of "dynent" type name[0] = demoflags = 0; bottomRTT = ping = 9999; team = TEAM_SPECT; + state.state = CS_SPECTATE; loopi(2) skin[i] = 0; position.setsize(0); messages.setsize(0); diff --git a/source/src/serverchecks.h b/source/src/serverchecks.h index 508d48a9..19cbaa63 100644 --- a/source/src/serverchecks.h +++ b/source/src/serverchecks.h @@ -460,9 +460,12 @@ void check_afk(){ loopv(clients) { client &c = *clients[i]; - if ( c.type != ST_TCPIP ) continue; - if ( ( c.state.state == CS_DEAD && !m_arena && c.state.lastdeath + 30 * 1000 < gamemillis ) || - ( c.state.state == CS_ALIVE && c.upspawnp && c.inputmillis + 30 * 1000 < servmillis ) ) { + if ( c.type != ST_TCPIP || c.connectmillis + 30 * 1000 > servmillis || + c.inputmillis + 30 * 1000 > servmillis || + c.state.lastdeath + 30 * 1000 > gamemillis ) continue; + if ( ( c.state.state == CS_DEAD && !m_arena ) || + ( c.state.state == CS_ALIVE && c.upspawnp ) || + ( c.state.state == CS_SPECTATE && mastermode == MM_OPEN ) ) { logline(ACLOG_INFO, "[%s] %s %s", c.hostname, c.name, "is afk"); defformatstring(msg)("%s is afk", c.name); sendservmsg(msg);