From 35508bc8fbc1c07c23f225f906b3e07c0184057b Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 30 Jan 2018 16:32:16 +0200 Subject: [PATCH] Fixed resetting CVARs via internal menu CCMDs This restores functionality of reset to defaults/saved menu options --- src/c_cvars.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/c_cvars.cpp b/src/c_cvars.cpp index 2444f2b3f..7edf126ab 100644 --- a/src/c_cvars.cpp +++ b/src/c_cvars.cpp @@ -157,11 +157,6 @@ void FBaseCVar::SetGenericRep (UCVarValue value, ECVarType type) { return; } - else if (UnsafeExecutionContext && !(GetFlags() & CVAR_MOD)) - { - Printf(TEXTCOLOR_RED "Cannot set console variable" TEXTCOLOR_GOLD " %s " TEXTCOLOR_RED "from unsafe command\n", GetName()); - return; - } else if ((Flags & CVAR_LATCH) && gamestate != GS_FULLCONSOLE && gamestate != GS_STARTUP) { FLatchedValue latch; @@ -1712,6 +1707,16 @@ void C_ArchiveCVars (FConfigFile *f, uint32_t filter) EXTERN_CVAR(Bool, sv_cheats); +static bool IsUnsafe(const FBaseCVar *const var) +{ + const bool unsafe = UnsafeExecutionContext && !(var->GetFlags() & CVAR_MOD); + if (unsafe) + { + Printf(TEXTCOLOR_RED "Cannot set console variable" TEXTCOLOR_GOLD " %s " TEXTCOLOR_RED "from unsafe command\n", var->GetName()); + } + return unsafe; +} + void FBaseCVar::CmdSet (const char *newval) { if ((GetFlags() & CVAR_CHEAT) && !sv_cheats) @@ -1719,6 +1724,10 @@ void FBaseCVar::CmdSet (const char *newval) Printf("sv_cheats must be true to set this console variable.\n"); return; } + else if (IsUnsafe(this)) + { + return; + } UCVarValue val; @@ -1805,6 +1814,11 @@ CCMD (toggle) { if ( (var = FindCVar (argv[1], &prev)) ) { + if (IsUnsafe(var)) + { + return; + } + val = var->GetGenericRep (CVAR_Bool); val.Bool = !val.Bool; var->SetGenericRep (val, CVAR_Bool);