Fix changing the game / mod through the 'game' console command.

The 'game' command was more or less functional after the last commit.
We just need to reset the initialGame (renamed to userGivenGame) so we
don't revert back to the old game at server disconnect.
This commit is contained in:
Yamagi Burmeister 2018-02-25 09:27:27 +01:00
parent f0e21e2ab4
commit 2db01319a1
4 changed files with 18 additions and 12 deletions

View file

@ -364,8 +364,7 @@ CL_Disconnect(void)
CL_WriteConfiguration(); CL_WriteConfiguration();
// we disconnected, so revert to default game/mod (might have been different mod on MP server) // we disconnected, so revert to default game/mod (might have been different mod on MP server)
const char* game = Qcommon_GetInitialGame(); Cvar_Set("game", userGivenGame);
Cvar_Set("game", (char*)game);
} }
void void

View file

@ -452,6 +452,14 @@ Cvar_Command(void)
return true; return true;
} }
/* Another evil hack: The user has just changed 'game' trough
the console. We reset userGivenGame to that value, otherwise
we would revert to the initialy given game at disconnect. */
if (strcmp(v->name, "game") == 0)
{
Q_strlcpy(userGivenGame, Cmd_Argv(1), sizeof(userGivenGame));
}
Cvar_Set(v->name, Cmd_Argv(1)); Cvar_Set(v->name, Cmd_Argv(1));
return true; return true;
} }

View file

@ -73,6 +73,9 @@ void SCR_EndLoadingPlaque(void);
// Is the game portable? // Is the game portable?
qboolean is_portable; qboolean is_portable;
// Game given by user
char userGivenGame[MAX_QPATH];
// ---- // ----
static void static void
@ -192,13 +195,6 @@ void Qcommon_ExecConfigs(qboolean gameStartUp)
Cbuf_Execute(); Cbuf_Execute();
} }
static char initialGame[MAX_QPATH];
const char* Qcommon_GetInitialGame(void)
{
return initialGame;
}
void void
Qcommon_Init(int argc, char **argv) Qcommon_Init(int argc, char **argv)
{ {
@ -239,11 +235,13 @@ Qcommon_Init(int argc, char **argv)
{ {
cvar_t* gameCvar = Cvar_Get("game", "", CVAR_LATCH | CVAR_SERVERINFO); cvar_t* gameCvar = Cvar_Get("game", "", CVAR_LATCH | CVAR_SERVERINFO);
const char* game = ""; const char* game = "";
if(gameCvar->string && gameCvar->string[0]) if(gameCvar->string && gameCvar->string[0])
{ {
game = gameCvar->string; game = gameCvar->string;
} }
Q_strlcpy(initialGame, game, sizeof(initialGame));
Q_strlcpy(userGivenGame, game, sizeof(userGivenGame));
} }
// The filesystems needs to be initialized after the cvars. // The filesystems needs to be initialized after the cvars.
@ -262,8 +260,6 @@ Qcommon_Init(int argc, char **argv)
developer = Cvar_Get("developer", "0", 0); developer = Cvar_Get("developer", "0", 0);
fixedtime = Cvar_Get("fixedtime", "0", 0); fixedtime = Cvar_Get("fixedtime", "0", 0);
logfile_active = Cvar_Get("logfile", "1", CVAR_ARCHIVE); logfile_active = Cvar_Get("logfile", "1", CVAR_ARCHIVE);
modder = Cvar_Get("modder", "0", 0); modder = Cvar_Get("modder", "0", 0);
timescale = Cvar_Get("timescale", "1", 0); timescale = Cvar_Get("timescale", "1", 0);

View file

@ -735,6 +735,9 @@ extern qboolean is_portable;
/* Hack fo external datadir */ /* Hack fo external datadir */
extern char datadir[MAX_OSPATH]; extern char datadir[MAX_OSPATH];
/* Hack for working 'game' cmd */
extern char userGivenGame[MAX_QPATH];
extern FILE *log_stats_file; extern FILE *log_stats_file;
/* host_speeds times */ /* host_speeds times */