From a87eee1818e4cde149935a56a762c7e80e9fd2f0 Mon Sep 17 00:00:00 2001 From: Amos <48657826+Mauler125@users.noreply.github.com> Date: Mon, 27 Dec 2021 02:23:03 +0100 Subject: [PATCH] Fix bug where FCVAR_CHEATS gets stripped regardless of intention --- r5dev/tier0/ConCommand.cpp | 75 ++++++++++++++++++++++----------- r5dev/tier0/IConVar.cpp | 85 +++++++++++++++++++++++++------------- r5dev/tier0/cvar.cpp | 2 +- 3 files changed, 110 insertions(+), 52 deletions(-) diff --git a/r5dev/tier0/ConCommand.cpp b/r5dev/tier0/ConCommand.cpp index 15fd5f84..98b568a9 100644 --- a/r5dev/tier0/ConCommand.cpp +++ b/r5dev/tier0/ConCommand.cpp @@ -12,33 +12,62 @@ //----------------------------------------------------------------------------- bool HConCommand_IsFlagSet(ConCommandBase* pCommandBase, int nFlag) { - if (cm_debug_cmdquery->m_pParent->m_iValue > 0) - { - printf("--------------------------------------------------\n"); - printf(" Flaged: %08X\n", pCommandBase->m_nFlags); - } - // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY - pCommandBase->m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); - if (cm_debug_cmdquery->m_pParent->m_iValue > 0) - { - printf(" Masked: %08X\n", pCommandBase->m_nFlags); - printf(" Verify: %08X\n", nFlag); - printf("--------------------------------------------------\n"); - } - if (nFlag & 0x80000 && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) - { - return ConCommand_IsFlagSet(pCommandBase, nFlag); - } - if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) - { - // Returning false on all queries may cause problems. - return false; - } - if (cm_return_false_cmdquery_dev_cheat->m_pParent->m_iValue > 0) + if (cm_return_false_cmdquery_cheats->m_pParent->m_iValue > 0) { + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf("--------------------------------------------------\n"); + printf(" Flaged: %08X\n", pCommandBase->m_nFlags); + } + // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY. + pCommandBase->m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf(" Masked: %08X\n", pCommandBase->m_nFlags); + printf(" Verify: %08X\n", nFlag); + printf("--------------------------------------------------\n"); + } + if (nFlag & FCVAR_RELEASE && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) + { + // Default retail behaviour. + return ConCommand_IsFlagSet(pCommandBase, nFlag); + } + if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) + { + // Returning false on all queries may cause problems. + return false; + } // Return false on every FCVAR_DEVELOPMENTONLY || FCVAR_CHEAT query. return (pCommandBase->m_nFlags & nFlag) != 0; } + else + { + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf("--------------------------------------------------\n"); + printf(" Flaged: %08X\n", pCommandBase->m_nFlags); + } + // Mask off FCVAR_DEVELOPMENTONLY. + pCommandBase->m_nFlags &= ~(FCVAR_DEVELOPMENTONLY); + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf(" Masked: %08X\n", pCommandBase->m_nFlags); + printf(" Verify: %08X\n", nFlag); + printf("--------------------------------------------------\n"); + } + if (nFlag & FCVAR_RELEASE && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) + { + // Default retail behaviour. + return ConCommand_IsFlagSet(pCommandBase, nFlag); + } + if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) + { + // Returning false on all queries may cause problems. + return false; + } + // Return false on every FCVAR_DEVELOPMENTONLY query. + return (pCommandBase->m_nFlags & nFlag) != 0; + } // Default behaviour. return ConCommand_IsFlagSet(pCommandBase, nFlag); } diff --git a/r5dev/tier0/IConVar.cpp b/r5dev/tier0/IConVar.cpp index 4151c112..d81edbf4 100644 --- a/r5dev/tier0/IConVar.cpp +++ b/r5dev/tier0/IConVar.cpp @@ -11,34 +11,63 @@ //----------------------------------------------------------------------------- bool HIConVar_IsFlagSet(ConVar* pConVar, int nFlags) { - if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + if (cm_return_false_cmdquery_cheats->m_pParent->m_iValue > 0) { - printf("--------------------------------------------------\n"); - printf(" Flaged: %08X\n", pConVar->m_ConCommandBase.m_nFlags); - } - // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY - pConVar->m_ConCommandBase.m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); - if (cm_debug_cmdquery->m_pParent->m_iValue > 0) - { - printf(" Masked: %08X\n", pConVar->m_ConCommandBase.m_nFlags); - printf(" Verify: %08X\n", nFlags); - printf("--------------------------------------------------\n"); - } - if (nFlags & 0x80000 && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) - { - return IConVar_IsFlagSet(pConVar, nFlags); - } - if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) - { - // Returning false on all queries may cause problems. - return false; - } - if (cm_return_false_cmdquery_dev_cheat->m_pParent->m_iValue > 0) - { - // Return false on every FCVAR_DEVELOPMENTONLY || FCVAR_CHEAT query. + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf("--------------------------------------------------\n"); + printf(" Flaged: %08X\n", pConVar->m_ConCommandBase.m_nFlags); + } + // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY. + pConVar->m_ConCommandBase.m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf(" Masked: %08X\n", pConVar->m_ConCommandBase.m_nFlags); + printf(" Verify: %08X\n", nFlags); + printf("--------------------------------------------------\n"); + } + if (nFlags & FCVAR_RELEASE && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) + { + // Default retail behaviour. + return IConVar_IsFlagSet(pConVar, nFlags); + } + if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) + { + // Returning false on all queries may cause problems. + return false; + } + // Return false on every FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT query. return (pConVar->m_ConCommandBase.m_nFlags & nFlags) != 0; } - // Default behaviour. + else + { + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf("--------------------------------------------------\n"); + printf(" Flaged: %08X\n", pConVar->m_ConCommandBase.m_nFlags); + } + // Mask off FCVAR_DEVELOPMENTONLY. + pConVar->m_ConCommandBase.m_nFlags &= ~(FCVAR_DEVELOPMENTONLY); + if (cm_debug_cmdquery->m_pParent->m_iValue > 0) + { + printf(" Masked: %08X\n", pConVar->m_ConCommandBase.m_nFlags); + printf(" Verify: %08X\n", nFlags); + printf("--------------------------------------------------\n"); + } + if (nFlags & FCVAR_RELEASE && cm_return_false_cmdquery_all->m_pParent->m_iValue <= 0) + { + // Default retail behaviour. + return IConVar_IsFlagSet(pConVar, nFlags); + } + if (cm_return_false_cmdquery_all->m_pParent->m_iValue > 0) + { + // Returning false on all queries may cause problems. + return false; + } + // Return false on every FCVAR_DEVELOPMENTONLY query. + return (pConVar->m_ConCommandBase.m_nFlags & nFlags) != 0; + } + // Default retail behaviour. return IConVar_IsFlagSet(pConVar, nFlags); } @@ -67,9 +96,9 @@ void IConVar_InitConVar() { //------------------------------------------------------------------------- // ENGINE | - cm_debug_cmdquery = IConVar_RegisterConVar("cm_debug_cmdquery", "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Prints the flags of each ConVar/ConCommand query to the console ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr); - cm_return_false_cmdquery_all = IConVar_RegisterConVar("cm_return_false_cmdquery_all", "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Returns false on every ConVar/ConCommand query ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); - cm_return_false_cmdquery_dev_cheat = IConVar_RegisterConVar("cm_return_false_cmdquery_dev_cheat", "1", FCVAR_RELEASE, "Returns false on all FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT ConVar/ConCommand queries ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_debug_cmdquery = IConVar_RegisterConVar("cm_debug_cmdquery", "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Prints the flags of each ConVar/ConCommand query to the console ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_return_false_cmdquery_all = IConVar_RegisterConVar("cm_return_false_cmdquery_all", "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Returns false on every ConVar/ConCommand query ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_return_false_cmdquery_cheats = IConVar_RegisterConVar("cm_return_false_cmdquery_cheats", "0", FCVAR_RELEASE, "Returns false on all FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT ConVar/ConCommand queries ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); //------------------------------------------------------------------------- // SERVER | sv_showconnecting = IConVar_RegisterConVar("sv_showconnecting", "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Logs information about the connecting client to the console.", false, 0.f, false, 0.f, nullptr, nullptr); diff --git a/r5dev/tier0/cvar.cpp b/r5dev/tier0/cvar.cpp index af17f00c..cac32474 100644 --- a/r5dev/tier0/cvar.cpp +++ b/r5dev/tier0/cvar.cpp @@ -7,7 +7,7 @@ // ENGINE | ConVar* cm_debug_cmdquery = new ConVar(); ConVar* cm_return_false_cmdquery_all = new ConVar(); -ConVar* cm_return_false_cmdquery_dev_cheat = new ConVar(); +ConVar* cm_return_false_cmdquery_cheats = new ConVar(); //------------------------------------------------------------------------- // SERVER | ConVar* sv_showconnecting = new ConVar();