diff --git a/src/server/header/server.h b/src/server/header/server.h index 4a5ae67e..71c21872 100644 --- a/src/server/header/server.h +++ b/src/server/header/server.h @@ -217,7 +217,7 @@ void Master_Heartbeat(void); void Master_Packet(void); void SV_InitGame(void); -void SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame); +void SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame, qboolean isautosave); void SV_PrepWorldFrame(void); diff --git a/src/server/sv_cmd.c b/src/server/sv_cmd.c index 561c575e..e98a2873 100644 --- a/src/server/sv_cmd.c +++ b/src/server/sv_cmd.c @@ -156,7 +156,7 @@ SV_DemoMap_f(void) return; } - SV_Map(true, Cmd_Argv(1), false); + SV_Map(true, Cmd_Argv(1), false, false); } /* @@ -261,7 +261,7 @@ SV_GameMap_f(void) /* start up the next map */ - SV_Map(false, map, false); + SV_Map(false, map, false, false); /* archive server state */ Q_strlcpy(svs.mapcmd, map, sizeof(svs.mapcmd)); diff --git a/src/server/sv_init.c b/src/server/sv_init.c index 449421c8..f9906740 100644 --- a/src/server/sv_init.c +++ b/src/server/sv_init.c @@ -123,7 +123,7 @@ SV_CreateBaseline(void) } void -SV_CheckForSavegame(void) +SV_CheckForSavegame(qboolean isautosave) { char name[MAX_OSPATH]; FILE *f; @@ -155,7 +155,7 @@ SV_CheckForSavegame(void) /* get configstrings and areaportals */ SV_ReadLevelFile(); - if (!sv.loadgame) + if (!sv.loadgame || (sv.loadgame && isautosave)) { /* coming back to a level after being in a different level, so run it for ten seconds */ @@ -179,7 +179,7 @@ SV_CheckForSavegame(void) */ void SV_SpawnServer(char *server, char *spawnpoint, server_state_t serverstate, - qboolean attractloop, qboolean loadgame) + qboolean attractloop, qboolean loadgame, qboolean isautosave) { int i; unsigned checksum; @@ -295,7 +295,7 @@ SV_SpawnServer(char *server, char *spawnpoint, server_state_t serverstate, SV_CreateBaseline(); /* check for a savegame */ - SV_CheckForSavegame(); + SV_CheckForSavegame(isautosave); /* set serverinfo variable */ Cvar_FullSet("mapname", sv.name, CVAR_SERVERINFO | CVAR_NOSET); @@ -439,7 +439,7 @@ SV_InitGame(void) * map tram.cin+jail_e3 */ void -SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame) +SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame, qboolean isautosave) { char level[MAX_QPATH]; char *ch; @@ -506,7 +506,7 @@ SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame) SCR_BeginLoadingPlaque(); /* for local system */ #endif SV_BroadcastCommand("changing\n"); - SV_SpawnServer(level, spawnpoint, ss_cinematic, attractloop, loadgame); + SV_SpawnServer(level, spawnpoint, ss_cinematic, attractloop, loadgame, isautosave); } else if ((l > 4) && !strcmp(level + l - 4, ".dm2")) { @@ -514,7 +514,7 @@ SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame) SCR_BeginLoadingPlaque(); /* for local system */ #endif SV_BroadcastCommand("changing\n"); - SV_SpawnServer(level, spawnpoint, ss_demo, attractloop, loadgame); + SV_SpawnServer(level, spawnpoint, ss_demo, attractloop, loadgame, isautosave); } else if ((l > 4) && !strcmp(level + l - 4, ".pcx")) { @@ -522,7 +522,7 @@ SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame) SCR_BeginLoadingPlaque(); /* for local system */ #endif SV_BroadcastCommand("changing\n"); - SV_SpawnServer(level, spawnpoint, ss_pic, attractloop, loadgame); + SV_SpawnServer(level, spawnpoint, ss_pic, attractloop, loadgame, isautosave); } else { @@ -531,7 +531,7 @@ SV_Map(qboolean attractloop, char *levelstring, qboolean loadgame) #endif SV_BroadcastCommand("changing\n"); SV_SendClientMessages(); - SV_SpawnServer(level, spawnpoint, ss_game, attractloop, loadgame); + SV_SpawnServer(level, spawnpoint, ss_game, attractloop, loadgame, isautosave); Cbuf_CopyToDefer(); } diff --git a/src/server/sv_save.c b/src/server/sv_save.c index 776a3aef..6cd339e5 100644 --- a/src/server/sv_save.c +++ b/src/server/sv_save.c @@ -417,6 +417,7 @@ SV_Loadgame_f(void) char name[MAX_OSPATH]; FILE *f; char *dir; + qboolean isautosave; if (Cmd_Argc() != 2) { @@ -444,6 +445,18 @@ SV_Loadgame_f(void) return; } + Com_Printf("Savegame: %s\n", Cmd_Argv(1)); + + if (strcmp(Cmd_Argv(1), "save0") == 0 || + strcmp(Cmd_Argv(1), "current") == 0) + { + isautosave = true; + } + else + { + isautosave = false; + } + fclose(f); SV_CopySaveGame(Cmd_Argv(1), "current"); @@ -452,7 +465,7 @@ SV_Loadgame_f(void) /* go to the map */ sv.state = ss_dead; /* don't save current level when changing */ - SV_Map(false, svs.mapcmd, true); + SV_Map(false, svs.mapcmd, true, isautosave); } void