mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-21 03:21:08 +00:00
reapply autosave patch
This commit is contained in:
parent
aedfb9636d
commit
382b135cca
2 changed files with 100 additions and 0 deletions
33
Quake/host.c
33
Quake/host.c
|
@ -657,6 +657,39 @@ void Host_ServerFrame (void)
|
||||||
|
|
||||||
// send all messages to the clients
|
// send all messages to the clients
|
||||||
SV_SendClientMessages ();
|
SV_SendClientMessages ();
|
||||||
|
|
||||||
|
// autosave
|
||||||
|
qboolean autosaveAllowed = (!deathmatch.value &&
|
||||||
|
!coop.value &&
|
||||||
|
!sv.paused &&
|
||||||
|
sv.active &&
|
||||||
|
!cl.intermission &&
|
||||||
|
svs.maxclients == 1 &&
|
||||||
|
sv_player->v.deadflag == DEAD_NO);
|
||||||
|
if (autosaveAllowed)
|
||||||
|
{
|
||||||
|
static double oldhealth = 0;
|
||||||
|
static double lastautosave = 0;
|
||||||
|
|
||||||
|
// Reset the last autosave time if it is out of bounds (i.e. we changed maps)
|
||||||
|
if (lastautosave > sv.time)
|
||||||
|
{
|
||||||
|
lastautosave = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only autosave when health is picked up
|
||||||
|
if ((sv.time - lastautosave) > 30.0
|
||||||
|
&& (sv_player->v.health > oldhealth))
|
||||||
|
{
|
||||||
|
char command[MAX_QPATH + 10];
|
||||||
|
sprintf(command, "save auto_%s", sv.name);
|
||||||
|
|
||||||
|
Cmd_ExecuteString (command, src_command);
|
||||||
|
lastautosave = sv.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldhealth = sv_player->v.health;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -33,8 +33,14 @@ extern int com_nummissionpacks; //johnfitz
|
||||||
|
|
||||||
int current_skill;
|
int current_skill;
|
||||||
|
|
||||||
|
char lastsavename[MAX_QPATH]; // autosave
|
||||||
|
char lastsavemapname[MAX_QPATH]; // autosave
|
||||||
|
|
||||||
void Mod_Print (void);
|
void Mod_Print (void);
|
||||||
|
|
||||||
|
static qboolean _autoloadIfPossible();
|
||||||
|
static void _resetAutoload();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
Host_Quit_f
|
Host_Quit_f
|
||||||
|
@ -837,6 +843,8 @@ void Host_Map_f (void)
|
||||||
key_dest = key_game; // remove console or menu
|
key_dest = key_game; // remove console or menu
|
||||||
SCR_BeginLoadingPlaque ();
|
SCR_BeginLoadingPlaque ();
|
||||||
|
|
||||||
|
_resetAutoload(); // autosave
|
||||||
|
|
||||||
svs.serverflags = 0; // haven't completed an episode yet
|
svs.serverflags = 0; // haven't completed an episode yet
|
||||||
q_strlcpy (name, Cmd_Argv(1), sizeof(name));
|
q_strlcpy (name, Cmd_Argv(1), sizeof(name));
|
||||||
// remove (any) trailing ".bsp" from mapname S.A.
|
// remove (any) trailing ".bsp" from mapname S.A.
|
||||||
|
@ -894,9 +902,52 @@ void Host_Changelevel_f (void)
|
||||||
key_dest = key_game; // remove console or menu
|
key_dest = key_game; // remove console or menu
|
||||||
SV_SaveSpawnparms ();
|
SV_SaveSpawnparms ();
|
||||||
q_strlcpy (level, Cmd_Argv(1), sizeof(level));
|
q_strlcpy (level, Cmd_Argv(1), sizeof(level));
|
||||||
|
fprintf(stderr, "Host_Changelevel_f '%s'\n", level);
|
||||||
|
_resetAutoload(); // autosave
|
||||||
SV_SpawnServer (level);
|
SV_SpawnServer (level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static qboolean _autoloadIfPossible()
|
||||||
|
{
|
||||||
|
if (!deathmatch.value &&
|
||||||
|
!coop.value &&
|
||||||
|
sv.active &&
|
||||||
|
!cl.intermission &&
|
||||||
|
svs.maxclients == 1)
|
||||||
|
{
|
||||||
|
if (0 == strcmp(sv.name, lastsavemapname))
|
||||||
|
{
|
||||||
|
char command[MAX_QPATH + 5];
|
||||||
|
sprintf(command, "load %s", lastsavename);
|
||||||
|
|
||||||
|
Cmd_ExecuteString (command, src_command);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _resetAutoload()
|
||||||
|
{
|
||||||
|
lastsavemapname[0] = '\0'; // autosave - we are explicitly restarting the level, so don't autoload
|
||||||
|
lastsavename[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
Host_Autoload_f
|
||||||
|
|
||||||
|
Automatically loads either the
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
void Host_Autoload_f (void)
|
||||||
|
{
|
||||||
|
if (!_autoloadIfPossible())
|
||||||
|
{
|
||||||
|
Host_Restart_f();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
Host_Restart_f
|
Host_Restart_f
|
||||||
|
@ -915,6 +966,18 @@ void Host_Restart_f (void)
|
||||||
return;
|
return;
|
||||||
q_strlcpy (mapname, sv.name, sizeof(mapname)); // must copy out, because it gets cleared
|
q_strlcpy (mapname, sv.name, sizeof(mapname)); // must copy out, because it gets cleared
|
||||||
// in sv_spawnserver
|
// in sv_spawnserver
|
||||||
|
|
||||||
|
if (sv_player->v.deadflag != DEAD_NO) // autosave
|
||||||
|
{
|
||||||
|
// If we are dead, attempt to autoload
|
||||||
|
if (_autoloadIfPossible())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_resetAutoload();
|
||||||
|
|
||||||
SV_SpawnServer (mapname);
|
SV_SpawnServer (mapname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1046,6 +1109,9 @@ void Host_Savegame_f (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strcpy(lastsavename, Cmd_Argv(1)); // autosave
|
||||||
|
strcpy(lastsavemapname, sv.name); // autosave
|
||||||
|
|
||||||
q_snprintf (name, sizeof(name), "%s/%s", com_gamedir, Cmd_Argv(1));
|
q_snprintf (name, sizeof(name), "%s/%s", com_gamedir, Cmd_Argv(1));
|
||||||
COM_DefaultExtension (name, ".sav", sizeof(name));
|
COM_DefaultExtension (name, ".sav", sizeof(name));
|
||||||
|
|
||||||
|
@ -2297,6 +2363,7 @@ void Host_InitCommands (void)
|
||||||
Cmd_AddCommand ("load", Host_Loadgame_f);
|
Cmd_AddCommand ("load", Host_Loadgame_f);
|
||||||
Cmd_AddCommand ("save", Host_Savegame_f);
|
Cmd_AddCommand ("save", Host_Savegame_f);
|
||||||
Cmd_AddCommand ("give", Host_Give_f);
|
Cmd_AddCommand ("give", Host_Give_f);
|
||||||
|
Cmd_AddCommand ("autoload", Host_Autoload_f); //autosave
|
||||||
|
|
||||||
Cmd_AddCommand ("startdemos", Host_Startdemos_f);
|
Cmd_AddCommand ("startdemos", Host_Startdemos_f);
|
||||||
Cmd_AddCommand ("demos", Host_Demos_f);
|
Cmd_AddCommand ("demos", Host_Demos_f);
|
||||||
|
|
Loading…
Reference in a new issue