diff options
author | zakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-09-17 01:36:38 +0000 |
---|---|---|
committer | zakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-09-17 01:36:38 +0000 |
commit | 10925c8309af0350541ab8fb0188b96bd67d35ad (patch) | |
tree | 5146b771c376785abfbe739ee35e01a873d2dd16 | |
parent | 468c8b373ff3fb1f5452d8198abe89018d99c414 (diff) | |
download | ioquake3-aero-10925c8309af0350541ab8fb0188b96bd67d35ad.tar.gz ioquake3-aero-10925c8309af0350541ab8fb0188b96bd67d35ad.zip |
Patch from Tim Angus, to fix a longstanding bug
in the server, wherein running the server for
more than 24 hours would cause the game to
exhibit weirdness as described here:
http://forums.wireheadstudios.org/index.php?act=ST&f=11&t=2749
That page would also indicate that more work
needs to be done if the map isn't going to change
for more than 24 hours.
git-svn-id: svn://svn.icculus.org/quake3/trunk@91 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r-- | code/server/server.h | 1 | ||||
-rw-r--r-- | code/server/sv_ccmds.c | 9 | ||||
-rw-r--r-- | code/server/sv_game.c | 2 | ||||
-rw-r--r-- | code/server/sv_init.c | 13 | ||||
-rw-r--r-- | code/server/sv_main.c | 7 | ||||
-rw-r--r-- | code/server/sv_snapshot.c | 2 |
6 files changed, 21 insertions, 13 deletions
diff --git a/code/server/server.h b/code/server/server.h index 589e1c4..b025c98 100644 --- a/code/server/server.h +++ b/code/server/server.h @@ -78,6 +78,7 @@ typedef struct { int gameClientSize; // will be > sizeof(playerState_t) due to game private data int restartTime; + int time; } server_t; diff --git a/code/server/sv_ccmds.c b/code/server/sv_ccmds.c index 03bd2c9..2d17ae9 100644 --- a/code/server/sv_ccmds.c +++ b/code/server/sv_ccmds.c @@ -272,8 +272,10 @@ static void SV_MapRestart_f( void ) { SV_RestartGameProgs(); // run a few frames to allow everything to settle - for ( i = 0 ;i < 3 ; i++ ) { - VM_Call( gvm, GAME_RUN_FRAME, svs.time ); + for (i = 0; i < 3; i++) + { + VM_Call (gvm, GAME_RUN_FRAME, sv.time); + sv.time += 100; svs.time += 100; } @@ -314,7 +316,8 @@ static void SV_MapRestart_f( void ) { } // run another frame to allow things to look at all the players - VM_Call( gvm, GAME_RUN_FRAME, svs.time ); + VM_Call (gvm, GAME_RUN_FRAME, sv.time); + sv.time += 100; svs.time += 100; } diff --git a/code/server/sv_game.c b/code/server/sv_game.c index f921226..86b1ee1 100644 --- a/code/server/sv_game.c +++ b/code/server/sv_game.c @@ -898,7 +898,7 @@ static void SV_InitGameVM( qboolean restart ) { // use the current msec count for a random seed // init for this gamestate - VM_Call( gvm, GAME_INIT, svs.time, Com_Milliseconds(), restart ); + VM_Call (gvm, GAME_INIT, sv.time, Com_Milliseconds(), restart); } diff --git a/code/server/sv_init.c b/code/server/sv_init.c index e3a89a6..0fa6956 100644 --- a/code/server/sv_init.c +++ b/code/server/sv_init.c @@ -438,9 +438,11 @@ void SV_SpawnServer( char *server, qboolean killBots ) { sv_gametype->modified = qfalse; // run a few frames to allow everything to settle - for ( i = 0 ;i < 3 ; i++ ) { - VM_Call( gvm, GAME_RUN_FRAME, svs.time ); - SV_BotFrame( svs.time ); + for (i = 0;i < 3; i++) + { + VM_Call (gvm, GAME_RUN_FRAME, sv.time); + SV_BotFrame (sv.time); + sv.time += 100; svs.time += 100; } @@ -495,8 +497,9 @@ void SV_SpawnServer( char *server, qboolean killBots ) { } // run another frame to allow things to look at all the players - VM_Call( gvm, GAME_RUN_FRAME, svs.time ); - SV_BotFrame( svs.time ); + VM_Call (gvm, GAME_RUN_FRAME, sv.time); + SV_BotFrame (sv.time); + sv.time += 100; svs.time += 100; if ( sv_pure->integer ) { diff --git a/code/server/sv_main.c b/code/server/sv_main.c index e83ce19..0d3f96c 100644 --- a/code/server/sv_main.c +++ b/code/server/sv_main.c @@ -785,7 +785,7 @@ void SV_Frame( int msec ) { sv.timeResidual += msec; - if (!com_dedicated->integer) SV_BotFrame( svs.time + sv.timeResidual ); + if (!com_dedicated->integer) SV_BotFrame (sv.time + sv.timeResidual); if ( com_dedicated->integer && sv.timeResidual < frameMsec ) { // NET_Sleep will give the OS time slices until either get a packet @@ -835,15 +835,16 @@ void SV_Frame( int msec ) { // update ping based on the all received frames SV_CalcPings(); - if (com_dedicated->integer) SV_BotFrame( svs.time ); + if (com_dedicated->integer) SV_BotFrame (sv.time); // run the game simulation in chunks while ( sv.timeResidual >= frameMsec ) { sv.timeResidual -= frameMsec; svs.time += frameMsec; + sv.time += frameMsec; // let everything in the world think and move - VM_Call( gvm, GAME_RUN_FRAME, svs.time ); + VM_Call (gvm, GAME_RUN_FRAME, sv.time); } if ( com_speeds->integer ) { diff --git a/code/server/sv_snapshot.c b/code/server/sv_snapshot.c index e275cf4..4c164da 100644 --- a/code/server/sv_snapshot.c +++ b/code/server/sv_snapshot.c @@ -160,7 +160,7 @@ static void SV_WriteSnapshotToClient( client_t *client, msg_t *msg ) { // send over the current server time so the client can drift // its view of time to try to match - MSG_WriteLong (msg, svs.time); + MSG_WriteLong (msg, sv.time); // what we are delta'ing from MSG_WriteByte (msg, lastframe); |