mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2025-01-05 16:30:51 +00:00
- compensate sv_fps for timescale value.
- Add a non-dirty-hack fix for client hanging when unpausing a game.
This commit is contained in:
parent
90b35ec5c8
commit
fb18a4b2e4
6 changed files with 35 additions and 15 deletions
|
@ -941,7 +941,7 @@ void CL_SetCGameTime( void ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow pause in single player
|
// allow pause in single player
|
||||||
if ( sv_paused->integer && cl_paused->integer && com_sv_running->integer ) {
|
if ( sv_paused->integer && CL_CheckPaused() && com_sv_running->integer ) {
|
||||||
// paused
|
// paused
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1961,7 +1961,7 @@ void CL_CheckTimeout( void ) {
|
||||||
//
|
//
|
||||||
// check timeout
|
// check timeout
|
||||||
//
|
//
|
||||||
if ( ( !cl_paused->integer || !sv_paused->integer )
|
if ( ( !CL_CheckPaused() || !sv_paused->integer )
|
||||||
&& cls.state >= CA_CONNECTED && cls.state != CA_CINEMATIC
|
&& cls.state >= CA_CONNECTED && cls.state != CA_CINEMATIC
|
||||||
&& cls.realtime - clc.lastPacketTime > cl_timeout->value*1000) {
|
&& cls.realtime - clc.lastPacketTime > cl_timeout->value*1000) {
|
||||||
if (++cl.timeoutcount > 5) { // timeoutcount saves debugger
|
if (++cl.timeoutcount > 5) { // timeoutcount saves debugger
|
||||||
|
@ -1974,6 +1974,22 @@ void CL_CheckTimeout( void ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
CL_CheckPaused
|
||||||
|
Check whether client has been paused.
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
qboolean CL_CheckPaused(void)
|
||||||
|
{
|
||||||
|
// if cl_paused->modified is set, the cvar has only been changed in
|
||||||
|
// this frame. Keep paused in this frame to ensure the server doesn't
|
||||||
|
// lag behind.
|
||||||
|
if(cl_paused->integer || cl_paused->modified)
|
||||||
|
return qtrue;
|
||||||
|
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
|
@ -1985,19 +2001,19 @@ CL_CheckUserinfo
|
||||||
*/
|
*/
|
||||||
void CL_CheckUserinfo( void ) {
|
void CL_CheckUserinfo( void ) {
|
||||||
// don't add reliable commands when not yet connected
|
// don't add reliable commands when not yet connected
|
||||||
if ( cls.state < CA_CHALLENGING ) {
|
if(cls.state < CA_CHALLENGING)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// don't overflow the reliable command buffer when paused
|
// don't overflow the reliable command buffer when paused
|
||||||
if ( cl_paused->integer ) {
|
if(CL_CheckPaused())
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// send a reliable userinfo update if needed
|
// send a reliable userinfo update if needed
|
||||||
if ( cvar_modifiedFlags & CVAR_USERINFO ) {
|
if(cvar_modifiedFlags & CVAR_USERINFO)
|
||||||
|
{
|
||||||
cvar_modifiedFlags &= ~CVAR_USERINFO;
|
cvar_modifiedFlags &= ~CVAR_USERINFO;
|
||||||
CL_AddReliableCommand( va("userinfo \"%s\"", Cvar_InfoString( CVAR_USERINFO ) ) );
|
CL_AddReliableCommand( va("userinfo \"%s\"", Cvar_InfoString( CVAR_USERINFO ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -219,6 +219,10 @@ void CL_ParseSnapshot( msg_t *msg ) {
|
||||||
|
|
||||||
newSnap.serverTime = MSG_ReadLong( msg );
|
newSnap.serverTime = MSG_ReadLong( msg );
|
||||||
|
|
||||||
|
// if we were just unpaused, we can only *now* really let the
|
||||||
|
// change come into effect or the client hangs.
|
||||||
|
cl_paused->modified = 0;
|
||||||
|
|
||||||
newSnap.messageNum = clc.serverMessageSequence;
|
newSnap.messageNum = clc.serverMessageSequence;
|
||||||
|
|
||||||
deltaNum = MSG_ReadByte( msg );
|
deltaNum = MSG_ReadByte( msg );
|
||||||
|
|
|
@ -394,6 +394,7 @@ void CL_InitRef( void );
|
||||||
qboolean CL_CDKeyValidate( const char *key, const char *checksum );
|
qboolean CL_CDKeyValidate( const char *key, const char *checksum );
|
||||||
int CL_ServerStatus( char *serverAddress, char *serverStatusString, int maxLen );
|
int CL_ServerStatus( char *serverAddress, char *serverStatusString, int maxLen );
|
||||||
|
|
||||||
|
qboolean CL_CheckPaused(void);
|
||||||
|
|
||||||
//
|
//
|
||||||
// cl_input
|
// cl_input
|
||||||
|
|
|
@ -798,7 +798,7 @@ void SV_Frame( int msec ) {
|
||||||
if ( sv_fps->integer < 1 ) {
|
if ( sv_fps->integer < 1 ) {
|
||||||
Cvar_Set( "sv_fps", "10" );
|
Cvar_Set( "sv_fps", "10" );
|
||||||
}
|
}
|
||||||
frameMsec = 1000 / sv_fps->integer ;
|
frameMsec = 1000 / sv_fps->integer * com_timescale->value;
|
||||||
|
|
||||||
sv.timeResidual += msec;
|
sv.timeResidual += msec;
|
||||||
|
|
||||||
|
|
|
@ -587,12 +587,12 @@ void SV_SendMessageToClient( msg_t *msg, client_t *client ) {
|
||||||
// TTimo - https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=491
|
// TTimo - https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=491
|
||||||
// added sv_lanForceRate check
|
// added sv_lanForceRate check
|
||||||
if ( client->netchan.remoteAddress.type == NA_LOOPBACK || (sv_lanForceRate->integer && Sys_IsLANAddress (client->netchan.remoteAddress)) ) {
|
if ( client->netchan.remoteAddress.type == NA_LOOPBACK || (sv_lanForceRate->integer && Sys_IsLANAddress (client->netchan.remoteAddress)) ) {
|
||||||
client->nextSnapshotTime = svs.time + (1000/sv_fps->integer);
|
client->nextSnapshotTime = svs.time + (1000.0 / sv_fps->integer * com_timescale->value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// normal rate / snapshotMsec calculation
|
// normal rate / snapshotMsec calculation
|
||||||
rateMsec = SV_RateMsec( client, msg->cursize );
|
rateMsec = SV_RateMsec(client, msg->cursize);
|
||||||
|
|
||||||
if ( rateMsec < client->snapshotMsec ) {
|
if ( rateMsec < client->snapshotMsec ) {
|
||||||
// never send more packets than this, no matter what the rate is at
|
// never send more packets than this, no matter what the rate is at
|
||||||
|
@ -602,16 +602,15 @@ void SV_SendMessageToClient( msg_t *msg, client_t *client ) {
|
||||||
client->rateDelayed = qtrue;
|
client->rateDelayed = qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
client->nextSnapshotTime = svs.time + rateMsec;
|
client->nextSnapshotTime = svs.time + rateMsec * com_timescale->value;
|
||||||
|
|
||||||
// don't pile up empty snapshots while connecting
|
// don't pile up empty snapshots while connecting
|
||||||
if ( client->state != CS_ACTIVE ) {
|
if ( client->state != CS_ACTIVE ) {
|
||||||
// a gigantic connection message may have already put the nextSnapshotTime
|
// a gigantic connection message may have already put the nextSnapshotTime
|
||||||
// more than a second away, so don't shorten it
|
// more than a second away, so don't shorten it
|
||||||
// do shorten if client is downloading
|
// do shorten if client is downloading
|
||||||
if ( !*client->downloadName && client->nextSnapshotTime < svs.time + 1000 ) {
|
if (!*client->downloadName && client->nextSnapshotTime < svs.time + 1000 * com_timescale->value)
|
||||||
client->nextSnapshotTime = svs.time + 1000;
|
client->nextSnapshotTime = svs.time + 1000 * com_timescale->value;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue