Updated IsFlagSet hooks.

* Cleaned up code to properly mask off Dev and Cheat flags.
* Added separate define from _DEBUG so you can define it in release builds for people without C++ Debug Restributeables.
This commit is contained in:
IcePixelx 2021-08-17 23:04:53 +02:00
parent 7e7717ff68
commit 54cdb2fb61

View File

@ -1,6 +1,10 @@
#include "pch.h"
#include "hooks.h"
#ifdef _DEBUG
#define MaskOffCheats
#endif
namespace Hooks
{
ConVar_IsFlagSetFn originalConVar_IsFlagSet = nullptr;
@ -10,19 +14,19 @@ namespace Hooks
bool Hooks::ConVar_IsFlagSet(ConVar* cvar, int flag)
{
#ifdef _DEBUG
#ifdef MaskOffCheats
if (g_bDebugConsole)
{
printf("--------------------------------------------------\n");
printf(" Flaged: %08X\n", cvar->m_ConCommandBase.m_nFlags);
std::cout << "--------------------------------------------------\n";
std::cout << cvar->m_ConCommandBase.m_pszName << " Flags: " << std::hex << std::uppercase << cvar->m_ConCommandBase.m_nFlags << "\n";
}
// Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY
cvar->m_ConCommandBase.m_nFlags &= 0xFFFFBFFD;
// Mask off FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT.
cvar->m_ConCommandBase.m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT);
if (g_bDebugConsole)
{
printf(" Masked: %08X\n", cvar->m_ConCommandBase.m_nFlags);
printf(" Verify: %08X\n", flag);
printf("--------------------------------------------------\n");
std::cout << cvar->m_ConCommandBase.m_pszName << " Flags: " << std::hex << std::uppercase << cvar->m_ConCommandBase.m_nFlags << "\n";
std::cout << cvar->m_ConCommandBase.m_pszName << " Verify: " << std::hex << std::uppercase << flag << "\n";
std::cout << "--------------------------------------------------\n";
}
if (flag & FCVAR_RELEASE)
@ -30,14 +34,12 @@ bool Hooks::ConVar_IsFlagSet(ConVar* cvar, int flag)
return true;
}
if (!g_bReturnAllFalse)
{
return (cvar->m_ConCommandBase.m_nFlags & flag) != 0;
}
else
if (g_bReturnAllFalse)
{
return false;
}
return (cvar->m_ConCommandBase.m_nFlags & flag) != 0;
#else
// Mask off FCVAR_DEVELOPMENTONLY if existing.
cvar->m_ConCommandBase.m_nFlags &= ~FCVAR_DEVELOPMENTONLY;
@ -48,19 +50,19 @@ bool Hooks::ConVar_IsFlagSet(ConVar* cvar, int flag)
bool Hooks::ConCommand_IsFlagSet(ConCommandBase* cmd, int flag)
{
#ifdef _DEBUG
#ifdef MaskOffCheats
if (g_bDebugConsole)
{
printf("--------------------------------------------------\n");
printf(" Flaged: %08X\n", cmd->m_nFlags);
std::cout << "--------------------------------------------------\n";
std::cout << cmd->m_pszName << " Flags: " << std::hex << std::uppercase << cmd->m_nFlags << "\n";
}
// Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY
cmd->m_nFlags &= 0xFFFFBFFD;
// Mask off FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT.
cmd->m_nFlags &= ~(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT);
if (g_bDebugConsole)
{
printf(" Masked: %08X\n", cmd->m_nFlags);
printf(" Verify: %08X\n", flag);
printf("--------------------------------------------------\n");
std::cout << cmd->m_pszName << " Flags: " << std::hex << std::uppercase << cmd->m_nFlags << "\n";
std::cout << cmd->m_pszName << " Verify: " << std::hex << std::uppercase << flag << "\n";
std::cout << "--------------------------------------------------\n";
}
if (flag & FCVAR_RELEASE)
@ -68,14 +70,12 @@ bool Hooks::ConCommand_IsFlagSet(ConCommandBase* cmd, int flag)
return true;
}
if (!g_bReturnAllFalse)
{
return (cmd->m_nFlags & flag) != 0;
}
else
if (g_bReturnAllFalse)
{
return false;
}
return (cmd->m_nFlags & flag) != 0;
#else
// Mask off FCVAR_DEVELOPMENTONLY if existing.
cmd->m_nFlags &= ~FCVAR_DEVELOPMENTONLY;