[iortcw] 380/497: SP: Fix server time when loading or quick-loading save game

Simon McVittie smcv at debian.org
Fri Sep 8 10:37:32 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.42d
in repository iortcw.

commit 90b7055f066136ff9f61d45109d446d499d282bd
Author: Zack Middleton <zturtleman at gmail.com>
Date:   Sun Jul 26 20:07:38 2015 -0500

    SP: Fix server time when loading or quick-loading save game
    
    This fixes being unable to jump and NPCs non-functional until sv.time catches
    up with save game's server time.
    
    I think (only) sv.time should be set to the server time from the save game.
    
    sv.time is used for snapshot and frame time.
    svs.time is used for network stuff and is not reset on map change.
---
 SP/code/server/sv_ccmds.c |  8 +++++---
 SP/code/server/sv_init.c  | 27 +++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/SP/code/server/sv_ccmds.c b/SP/code/server/sv_ccmds.c
index 4030229..ab67154 100644
--- a/SP/code/server/sv_ccmds.c
+++ b/SP/code/server/sv_ccmds.c
@@ -164,7 +164,6 @@ static void SV_Map_f( void ) {
 	char mapname[MAX_QPATH];
 	qboolean killBots, cheat, buildScript;
 	char expanded[MAX_QPATH];
-	int savegameTime = -1;
 
 	map = Cmd_Argv( 1 );
 	if ( !map ) {
@@ -183,6 +182,7 @@ static void SV_Map_f( void ) {
 		char savemap[MAX_QPATH];
 		byte *buffer;
 		int size, csize;
+		//int savegameTime;
 
 		if ( !( strstr( map, "save/" ) == map ) ) {
 			Com_sprintf( savemap, sizeof( savemap ), "save/%s", map );
@@ -227,11 +227,13 @@ static void SV_Map_f( void ) {
 		Q_strncpyz( smapname, savemap, sizeof( smapname ) );
 		map = smapname;
 
+#if 0 // cannot set before SV_SpawnServer clears sv.time
 		savegameTime = *( int * )( buffer + sizeof( int ) + MAX_QPATH );
 
 		if ( savegameTime >= 0 ) {
-			svs.time = savegameTime;
+			sv.time = savegameTime;
 		}
+#endif
 
 		Hunk_FreeTempMemory( buffer );
 	} else {
@@ -386,7 +388,7 @@ static void SV_MapRestart_f( void ) {
 		savegameTime = *( int * )( buffer + sizeof( int ) + MAX_QPATH );
 
 		if ( savegameTime >= 0 ) {
-			svs.time = savegameTime;
+			sv.time = savegameTime;
 		}
 
 		Hunk_FreeTempMemory( buffer );
diff --git a/SP/code/server/sv_init.c b/SP/code/server/sv_init.c
index cddcb8f..2caf953 100644
--- a/SP/code/server/sv_init.c
+++ b/SP/code/server/sv_init.c
@@ -782,6 +782,33 @@ void SV_SpawnServer( char *server, qboolean killBots ) {
 	// wipe the entire per-level structure
 	SV_ClearServer();
 
+	// Ridah, check for loading a saved game
+	if ( Cvar_VariableIntegerValue( "savegame_loading" ) ) {
+		// open the current savegame, and find out what the time is, everything else we can ignore
+		char *savemap = "save/current.svg";
+		byte *buffer;
+		int size, savegameTime;
+
+		size = FS_ReadFile( savemap, NULL );
+		if ( size < 0 ) {
+			Com_Printf( "Can't find savegame %s\n", savemap );
+			return;
+		}
+
+		//buffer = Hunk_AllocateTempMemory(size);
+		FS_ReadFile( savemap, (void **)&buffer );
+
+		// the mapname is at the very start of the savegame file
+		savegameTime = *( int * )( buffer + sizeof( int ) + MAX_QPATH );
+
+		if ( savegameTime >= 0 ) {
+			sv.time = savegameTime;
+		}
+
+		Hunk_FreeTempMemory( buffer );
+	}
+	// done.
+
 	// allocate empty config strings
 	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {
 		sv.configstrings[i] = CopyString( "" );

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git



More information about the Pkg-games-commits mailing list