From cb29a9dd0aeb28f3293f03f9810b46b70027545d Mon Sep 17 00:00:00 2001
From: James R <justsomejames2@gmail.com>
Date: Thu, 26 Dec 2019 18:15:19 -0800
Subject: [PATCH] CV_NOLUA for when a cvar should not be changed via Lua

---
 src/command.c        | 3 +++
 src/command.h        | 8 +++++++-
 src/dehacked.c       | 1 +
 src/lua_consolelib.c | 4 ++--
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/command.c b/src/command.c
index 3aa22b62f6..861a1f8282 100644
--- a/src/command.c
+++ b/src/command.c
@@ -2064,6 +2064,9 @@ static boolean CV_Command(void)
 	if (!v)
 		return false;
 
+	if (( com_flags & COM_SAFE ) && ( v->flags & CV_NOLUA ))
+		return false;
+
 	// perform a variable print or set
 	if (COM_Argc() == 1)
 	{
diff --git a/src/command.h b/src/command.h
index af9d08ae16..b1026437f1 100644
--- a/src/command.h
+++ b/src/command.h
@@ -20,6 +20,11 @@
 // Command buffer & command execution
 //===================================
 
+enum
+{
+	COM_SAFE = 1,
+};
+
 typedef void (*com_func_t)(void);
 
 void COM_AddCommand(const char *name, com_func_t func);
@@ -103,7 +108,8 @@ typedef enum
 	CV_HIDEN = 1024, // variable is not part of the cvar list so cannot be accessed by the console
 	                 // can only be set when we have the pointer to it
                    // used on menus
-	CV_CHEAT = 2048 // Don't let this be used in multiplayer unless cheats are on.
+	CV_CHEAT = 2048, // Don't let this be used in multiplayer unless cheats are on.
+	CV_NOLUA = 4096,/* don't let this be called from Lua */
 } cvflags_t;
 
 typedef struct CV_PossibleValue_s
diff --git a/src/dehacked.c b/src/dehacked.c
index 9abb708a94..c9e10c0649 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -9462,6 +9462,7 @@ struct {
 	{"CV_HIDEN",CV_HIDEN},
 	{"CV_HIDDEN",CV_HIDEN},
 	{"CV_CHEAT",CV_CHEAT},
+	{"CV_NOLUA",CV_NOLUA},
 
 	// v_video flags
 	{"V_NOSCALEPATCH",V_NOSCALEPATCH},
diff --git a/src/lua_consolelib.c b/src/lua_consolelib.c
index 58e720c85a..837612e521 100644
--- a/src/lua_consolelib.c
+++ b/src/lua_consolelib.c
@@ -245,7 +245,7 @@ static int lib_comBufAddText(lua_State *L)
 		return LUA_ErrInvalid(L, "player_t");
 	if (plr != &players[consoleplayer])
 		return 0;
-	COM_BufAddText(va("%s\n", luaL_checkstring(L, 2)));
+	COM_BufAddTextEx(va("%s\n", luaL_checkstring(L, 2)), COM_SAFE);
 	return 0;
 }
 
@@ -262,7 +262,7 @@ static int lib_comBufInsertText(lua_State *L)
 		return LUA_ErrInvalid(L, "player_t");
 	if (plr != &players[consoleplayer])
 		return 0;
-	COM_BufInsertText(va("%s\n", luaL_checkstring(L, 2)));
+	COM_BufInsertTextEx(va("%s\n", luaL_checkstring(L, 2)), COM_SAFE);
 	return 0;
 }
 
-- 
GitLab