diff --git a/code/client/citicore/console/Console.Variables.h b/code/client/citicore/console/Console.Variables.h index 29b92b77eb..832877d1fc 100644 --- a/code/client/citicore/console/Console.Variables.h +++ b/code/client/citicore/console/Console.Variables.h @@ -70,6 +70,9 @@ enum ConsoleVariableFlags // can't be 'setr'd from server->client ConVar_UserPref = 0x20, + + // blocks any modifications to the convar via set(s|a|r) commands + ConVar_Internal = 0x40, }; inline std::string ConsoleFlagsToString(ConsoleVariableFlags flags) @@ -87,6 +90,8 @@ inline std::string ConsoleFlagsToString(ConsoleVariableFlags flags) value += "Replicated "; if (flags & ConVar_ReadOnly) value += "ReadOnly "; + if (flags & ConVar_Internal) + value += "Internal "; return value; } @@ -216,7 +221,14 @@ class ConsoleVariableEntry : public ConsoleVariableEntryBase m_setCommand = std::make_unique(manager->GetParentContext(), name, [=] (const T& newValue) { - if (m_manager->GetEntryFlags(m_name) & ConVar_ReadOnly) + auto convarFlags = m_manager->GetEntryFlags(m_name); + if (convarFlags & ConVar_Internal) + { + console::PrintWarning("cmd", "'%s' is an internal ConVar and cannot be changed.\n", m_name); + return; + } + + if (convarFlags & ConVar_ReadOnly) { if (!m_manager->ShouldSuppressReadOnlyWarning() || !(typename ConsoleArgumentTraits::Equal()(GetRawValue(), m_curValue))) { @@ -269,7 +281,15 @@ class ConsoleVariableEntry : public ConsoleVariableEntryBase virtual bool SetValue(const std::string& value) override { - if (m_manager->GetEntryFlags(m_name) & ConVar_ReadOnly) + auto convarFlags = m_manager->GetEntryFlags(m_name); + if (convarFlags & ConVar_Internal) + { + console::PrintWarning("cmd", "'%s' is an internal ConVar and cannot be changed.\n", m_name); + + return false; + } + + if (convarFlags & ConVar_ReadOnly) { if (!m_manager->ShouldSuppressReadOnlyWarning()) { diff --git a/code/components/citizen-server-impl/src/InfoHttpHandler.cpp b/code/components/citizen-server-impl/src/InfoHttpHandler.cpp index 2461f8ea1a..d6e4e41f77 100644 --- a/code/components/citizen-server-impl/src/InfoHttpHandler.cpp +++ b/code/components/citizen-server-impl/src/InfoHttpHandler.cpp @@ -158,8 +158,8 @@ void InfoHttpHandlerComponentLocals::AttachToObject(fx::ServerInstanceBase* inst m_instance = instance; ivVar = instance->AddVariable("sv_infoVersion", ConVar_ServerInfo, 0); maxClientsVar = instance->AddVariable("sv_maxClients", ConVar_ServerInfo, 30); - iconVar = instance->AddVariable("sv_icon", ConVar_None, ""); - versionVar = instance->AddVariable("version", ConVar_None, "FXServer-" GIT_DESCRIPTION); + iconVar = instance->AddVariable("sv_icon", ConVar_Internal, ""); + versionVar = instance->AddVariable("version", ConVar_Internal, "FXServer-" GIT_DESCRIPTION); crashCmd = instance->AddCommand("_crash", []() { *(volatile int*)0 = 0;