aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-09-17 01:36:38 +0000
committerzakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-09-17 01:36:38 +0000
commit10925c8309af0350541ab8fb0188b96bd67d35ad (patch)
tree5146b771c376785abfbe739ee35e01a873d2dd16
parent468c8b373ff3fb1f5452d8198abe89018d99c414 (diff)
downloadioquake3-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.h1
-rw-r--r--code/server/sv_ccmds.c9
-rw-r--r--code/server/sv_game.c2
-rw-r--r--code/server/sv_init.c13
-rw-r--r--code/server/sv_main.c7
-rw-r--r--code/server/sv_snapshot.c2
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);