summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroy <tom_adams@web.de>2023-06-16 20:29:07 +0200
committerGitHub <noreply@github.com>2023-06-16 20:29:07 +0200
commit73c84cadc9cca00092017caba9f7d6e59926bc8b (patch)
treebd9981edd5f429641e24ae307353ee2d437a10cb
parentbe24a6272266c98052b039d594c97b614400afb3 (diff)
parent09b1a380ebef7ed12c287bb48db106fb3566aa76 (diff)
Merge pull request #2846 from ChillerDragon/pr_eval_if_cmd
Add eval_if_cmd console command
-rw-r--r--src/engine/shared/console.cpp14
-rw-r--r--src/engine/shared/console.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp
index 8ecab64b4..4209f4d7e 100644
--- a/src/engine/shared/console.cpp
+++ b/src/engine/shared/console.cpp
@@ -737,6 +737,19 @@ void CConsole::Con_EvalIf(IResult *pResult, void *pUserData)
pConsole->ExecuteLine(pResult->GetString(5));
}
+void CConsole::Con_EvalIfCmd(IResult *pResult, void *pUserData)
+{
+ CConsole *pConsole = static_cast<CConsole *>(pUserData);
+ CCommand *pCommand = pConsole->FindCommand(pResult->GetString(0), pConsole->m_FlagMask);
+ if(pResult->NumArguments() > 2 && str_comp(pResult->GetString(2), "else"))
+ pConsole->Print(OUTPUT_LEVEL_STANDARD, "console", "Error: expected else");
+
+ if(pCommand)
+ pConsole->ExecuteLine(pResult->GetString(1));
+ else if(pResult->NumArguments() == 4)
+ pConsole->ExecuteLine(pResult->GetString(3));
+}
+
void CConsole::ConToggle(IConsole::IResult *pResult, void *pUser)
{
CConsole *pConsole = static_cast<CConsole *>(pUser);
@@ -817,6 +830,7 @@ CConsole::CConsole(int FlagMask)
Register("echo", "r[text]", CFGFLAG_SERVER|CFGFLAG_CLIENT, Con_Echo, this, "Echo the text");
Register("exec", "r[file]", CFGFLAG_SERVER|CFGFLAG_CLIENT, Con_Exec, this, "Execute the specified file");
Register("eval_if", "s[config] s[comparison] s[value] s[command] ?s[else] ?s[command]", CFGFLAG_SERVER|CFGFLAG_CLIENT|CFGFLAG_STORE, Con_EvalIf, this, "Execute command if condition is true");
+ Register("eval_if_cmd", "s[check_command] s[command] ?s[else] ?s[command]", CFGFLAG_SERVER|CFGFLAG_CLIENT|CFGFLAG_STORE, Con_EvalIfCmd, this, "Execute command if check_command exists");
Register("toggle", "s[config-option] i[value1] i[value2]", CFGFLAG_SERVER|CFGFLAG_CLIENT, ConToggle, this, "Toggle config value");
Register("+toggle", "s[config-option] i[value1] i[value2]", CFGFLAG_CLIENT, ConToggleStroke, this, "Toggle config value via keypress");
diff --git a/src/engine/shared/console.h b/src/engine/shared/console.h
index 7976d72ed..38f23ecd8 100644
--- a/src/engine/shared/console.h
+++ b/src/engine/shared/console.h
@@ -60,6 +60,7 @@ class CConsole : public IConsole
static void Con_Echo(IResult *pResult, void *pUserData);
static void Con_Exec(IResult *pResult, void *pUserData);
static void Con_EvalIf(IResult *pResult, void *pUserData);
+ static void Con_EvalIfCmd(IResult *pResult, void *pUserData);
static void ConToggle(IResult *pResult, void *pUser);
static void ConToggleStroke(IResult *pResult, void *pUser);
static void ConModCommandAccess(IResult *pResult, void *pUser);