mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Tier1: increase buffer sizes for help command
Text typically gets truncated on concommands/convars with long help texts, this code is also very old. Increasing the buffer sizes fixed the problem. Code now also logs the usage texts if this is available (usage texts is newer than this code, so it was never taken into account).
This commit is contained in:
parent
d810768895
commit
72cbe5bc63
@ -159,13 +159,12 @@ public:
|
|||||||
extern ConVarFlags g_ConVarFlags;
|
extern ConVarFlags g_ConVarFlags;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
bool ConVar_ParseFlagString(const char* pszFlags, int& nFlags, const char* pszConVarName = "<<unspecified>>");
|
bool ConVar_ParseFlagString(const char* const pszFlags, int& nFlags, const char* const pszConVarName = "<<unspecified>>");
|
||||||
void ConVar_PrintDescription(ConCommandBase* pVar);
|
|
||||||
|
|
||||||
inline bool (*CCvar__Connect)(CCvar* thisptr, CreateInterfaceFn factory);
|
inline bool (*CCvar__Connect)(CCvar* thisptr, CreateInterfaceFn factory);
|
||||||
inline void (*CCvar__Disconnect)(CCvar* thisptr);
|
inline void (*CCvar__Disconnect)(CCvar* thisptr);
|
||||||
|
|
||||||
inline void (*v_ConVar_PrintDescription)(ConCommandBase* pVar);
|
inline void (*v_ConVar_PrintDescription)(const ConCommandBase* const pVar);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
class VCVar : public IDetour
|
class VCVar : public IDetour
|
||||||
|
@ -100,7 +100,7 @@ bool ConVar_ParseFlagString(const char* pszFlags, int& nFlags, const char* pszCo
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void ConVar_AppendFlags(ConCommandBase* var, char* buf, size_t bufsize)
|
static void ConVar_AppendFlags(const ConCommandBase* const var, char* buf, size_t bufsize)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc); ++i)
|
for (int i = 0; i < ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc); ++i)
|
||||||
{
|
{
|
||||||
@ -117,35 +117,31 @@ void ConVar_AppendFlags(ConCommandBase* var, char* buf, size_t bufsize)
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void ConVar_PrintDescription(ConCommandBase* pVar)
|
static void ConVar_PrintDescription(const ConCommandBase* const pVar)
|
||||||
{
|
{
|
||||||
bool bMin, bMax;
|
|
||||||
float fMin, fMax;
|
|
||||||
const char* pStr;
|
|
||||||
|
|
||||||
Assert(pVar);
|
Assert(pVar);
|
||||||
|
|
||||||
Color clr(255, 100, 100, 255);
|
|
||||||
|
|
||||||
char outstr[4096];
|
char outstr[4096];
|
||||||
outstr[0] = 0;
|
outstr[0] = 0;
|
||||||
|
|
||||||
if (!pVar->IsCommand())
|
if (!pVar->IsCommand())
|
||||||
{
|
{
|
||||||
ConVar* var = (ConVar*)pVar;
|
const ConVar* const var = (const ConVar*)pVar;
|
||||||
|
|
||||||
bMin = var->GetMin(fMin);
|
float fMin, fMax;
|
||||||
bMax = var->GetMax(fMax);
|
|
||||||
|
const bool bMin = var->GetMin(fMin);
|
||||||
|
const bool bMax = var->GetMax(fMax);
|
||||||
|
|
||||||
const char* value = NULL;
|
const char* value = NULL;
|
||||||
char tempVal[256];
|
char tempVal[1024];
|
||||||
|
|
||||||
if (var->IsFlagSet(FCVAR_NEVER_AS_STRING))
|
if (var->IsFlagSet(FCVAR_NEVER_AS_STRING))
|
||||||
{
|
{
|
||||||
value = tempVal;
|
value = tempVal;
|
||||||
|
|
||||||
int intVal = var->GetInt();
|
const int intVal = var->GetInt();
|
||||||
float floatVal = var->GetFloat();
|
const float floatVal = var->GetFloat();
|
||||||
|
|
||||||
if (fabs((float)intVal - floatVal) < 0.000001)
|
if (fabs((float)intVal - floatVal) < 0.000001)
|
||||||
{
|
{
|
||||||
@ -182,31 +178,46 @@ void ConVar_PrintDescription(ConCommandBase* pVar)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ConCommand* var = (ConCommand*)pVar;
|
const ConCommand* const var = (const ConCommand*)pVar;
|
||||||
|
|
||||||
AppendPrintf(outstr, sizeof(outstr), "\"%s\" ", var->GetName());
|
AppendPrintf(outstr, sizeof(outstr), "\"%s\" ", var->GetName());
|
||||||
}
|
}
|
||||||
|
|
||||||
ConVar_AppendFlags(pVar, outstr, sizeof(outstr));
|
ConVar_AppendFlags(pVar, outstr, sizeof(outstr));
|
||||||
|
|
||||||
pStr = pVar->GetHelpText();
|
const char* const pHelpStr = pVar->GetHelpText();
|
||||||
if (pStr && *pStr)
|
if (pHelpStr && *pHelpStr)
|
||||||
{
|
{
|
||||||
Msg(eDLL_T::COMMON, "%-80s - %.80s\n", outstr, pStr);
|
const char* const pUsageStr = pVar->GetUsageText();
|
||||||
|
if (pUsageStr && *pUsageStr)
|
||||||
|
{
|
||||||
|
Msg(eDLL_T::COMMON, "%-80s - %s ( %s )\n", outstr, pHelpStr, pUsageStr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Msg(eDLL_T::COMMON, "%-80s - %s\n", outstr, pHelpStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char* const pUsageStr = pVar->GetUsageText();
|
||||||
|
if (pUsageStr && *pUsageStr)
|
||||||
|
{
|
||||||
|
Msg(eDLL_T::COMMON, "%-80s - ( %s )\n", outstr, pUsageStr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Msg(eDLL_T::COMMON, "%-80s\n", outstr);
|
Msg(eDLL_T::COMMON, "%-80s\n", outstr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PrintListHeader(FileHandle_t& f)
|
static void PrintListHeader(FileHandle_t& f)
|
||||||
{
|
{
|
||||||
char csvflagstr[1024];
|
char csvflagstr[1024];
|
||||||
|
|
||||||
csvflagstr[0] = 0;
|
csvflagstr[0] = 0;
|
||||||
|
|
||||||
int c = ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc);
|
const int c = ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc);
|
||||||
for (int i = 0; i < c; ++i)
|
for (int i = 0; i < c; ++i)
|
||||||
{
|
{
|
||||||
char csvf[64];
|
char csvf[64];
|
||||||
@ -226,7 +237,7 @@ static void PrintListHeader(FileHandle_t& f)
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
static void PrintCvar(ConVar* var, bool logging, FileHandle_t& fh)
|
static void PrintCvar(ConVar* var, bool logging, FileHandle_t& fh)
|
||||||
{
|
{
|
||||||
char flagstr[128];
|
char flagstr[512];
|
||||||
char csvflagstr[1024];
|
char csvflagstr[1024];
|
||||||
|
|
||||||
flagstr[0] = 0;
|
flagstr[0] = 0;
|
||||||
@ -255,8 +266,7 @@ static void PrintCvar(ConVar* var, bool logging, FileHandle_t& fh)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char valstr[32];
|
char valstr[64];
|
||||||
char tempbuff[512] = { 0 };
|
|
||||||
|
|
||||||
// Clean up integers
|
// Clean up integers
|
||||||
if (var->GetInt() == (int)var->GetFloat())
|
if (var->GetInt() == (int)var->GetFloat())
|
||||||
@ -268,13 +278,19 @@ static void PrintCvar(ConVar* var, bool logging, FileHandle_t& fh)
|
|||||||
Q_snprintf(valstr, sizeof(valstr), "%-8.3f", var->GetFloat());
|
Q_snprintf(valstr, sizeof(valstr), "%-8.3f", var->GetFloat());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char tempHelpBuff[2048];
|
||||||
|
char tempUsageBuff[2048];
|
||||||
|
|
||||||
// Print to console
|
// Print to console
|
||||||
Msg(eDLL_T::COMMON, "%-40s : %-8s : %-16s : %s\n", var->GetName(),
|
Msg(eDLL_T::COMMON, "%-40s : %-8s : %-16s : %s ( %s )\n", var->GetName(), valstr, flagstr,
|
||||||
valstr, flagstr, StripTabsAndReturns(var->GetHelpText(), tempbuff, sizeof(tempbuff)));
|
StripTabsAndReturns(var->GetHelpText(), tempHelpBuff, sizeof(tempHelpBuff)),
|
||||||
|
StripTabsAndReturns(var->GetUsageText(), tempUsageBuff, sizeof(tempUsageBuff)));
|
||||||
|
|
||||||
if (logging)
|
if (logging)
|
||||||
{
|
{
|
||||||
FileSystem()->FPrintf(fh, "\"%s\",\"%s\",%s,\"%s\"\n", var->GetName(),
|
FileSystem()->FPrintf(fh, "\"%s\",\"%s\",%s,\"%s\",\"%s\"\n", var->GetName(), valstr, csvflagstr,
|
||||||
valstr, csvflagstr, StripQuotes(var->GetHelpText(), tempbuff, sizeof(tempbuff)));
|
StripQuotes(var->GetHelpText(), tempHelpBuff, sizeof(tempHelpBuff)),
|
||||||
|
StripQuotes(var->GetUsageText(), tempUsageBuff, sizeof(tempUsageBuff)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,14 +302,16 @@ static void PrintCvar(ConVar* var, bool logging, FileHandle_t& fh)
|
|||||||
static void PrintCommand(const ConCommand* cmd, bool logging, FileHandle_t& f)
|
static void PrintCommand(const ConCommand* cmd, bool logging, FileHandle_t& f)
|
||||||
{
|
{
|
||||||
// Print to console
|
// Print to console
|
||||||
char tempbuff[512] = { 0 };
|
char tempHelpBuff[2048];
|
||||||
Msg(eDLL_T::COMMON, "%-40s : %-8s : %-16s : %s\n", cmd->GetName(),
|
char tempUsageBuff[2048];
|
||||||
"cmd", "", StripTabsAndReturns(cmd->GetHelpText(), tempbuff, sizeof(tempbuff)));
|
|
||||||
|
Msg(eDLL_T::COMMON, "%-40s : %-8s : %-16s : %s ( %s )\n", cmd->GetName(), "cmd", "",
|
||||||
|
StripTabsAndReturns(cmd->GetHelpText(), tempHelpBuff, sizeof(tempHelpBuff)),
|
||||||
|
StripTabsAndReturns(cmd->GetUsageText(), tempUsageBuff, sizeof(tempUsageBuff)));
|
||||||
|
|
||||||
if (logging)
|
if (logging)
|
||||||
{
|
{
|
||||||
char emptyflags[256];
|
char emptyflags[512];
|
||||||
|
|
||||||
emptyflags[0] = 0;
|
emptyflags[0] = 0;
|
||||||
|
|
||||||
int c = ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc);
|
int c = ARRAYSIZE(g_ConVarFlags.m_FlagsToDesc);
|
||||||
@ -312,8 +330,10 @@ static void PrintCommand(const ConCommand* cmd, bool logging, FileHandle_t& f)
|
|||||||
{
|
{
|
||||||
Q_snprintf(nameBuf, sizeof(nameBuf), "'%s'", cmd->GetName());
|
Q_snprintf(nameBuf, sizeof(nameBuf), "'%s'", cmd->GetName());
|
||||||
}
|
}
|
||||||
FileSystem()->FPrintf(f, "\"%s\",\"%s\",%s,\"%s\"\n", nameBuf, "cmd",
|
|
||||||
emptyflags, StripQuotes(cmd->GetHelpText(), tempbuff, sizeof(tempbuff)));
|
FileSystem()->FPrintf(f, "\"%s\",\"%s\",%s,\"%s\",\"%s\"\n", nameBuf, "cmd", emptyflags,
|
||||||
|
StripQuotes(cmd->GetHelpText(), tempHelpBuff, sizeof(tempHelpBuff)),
|
||||||
|
StripQuotes(cmd->GetUsageText(), tempUsageBuff, sizeof(tempUsageBuff)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +432,7 @@ void CCvarUtilities::CvarList(const CCommand& args)
|
|||||||
|
|
||||||
if (!Q_strcasecmp(args[1], "log") && iArgs >= 3)
|
if (!Q_strcasecmp(args[1], "log") && iArgs >= 3)
|
||||||
{
|
{
|
||||||
char fn[256];
|
char fn[MAX_PATH];
|
||||||
Q_snprintf(fn, sizeof(fn), "%s", args[2]);
|
Q_snprintf(fn, sizeof(fn), "%s", args[2]);
|
||||||
f = FileSystem()->Open(fn, "wb", nullptr, 0);
|
f = FileSystem()->Open(fn, "wb", nullptr, 0);
|
||||||
if (f)
|
if (f)
|
||||||
@ -515,9 +535,6 @@ void CCvarUtilities::CvarList(const CCommand& args)
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CCvarUtilities::CvarHelp(const CCommand& args)
|
void CCvarUtilities::CvarHelp(const CCommand& args)
|
||||||
{
|
{
|
||||||
const char* search;
|
|
||||||
ConCommandBase* var;
|
|
||||||
|
|
||||||
if (args.ArgC() != 2)
|
if (args.ArgC() != 2)
|
||||||
{
|
{
|
||||||
Msg(eDLL_T::COMMON, "Usage: help <cvarname>\n");
|
Msg(eDLL_T::COMMON, "Usage: help <cvarname>\n");
|
||||||
@ -525,10 +542,10 @@ void CCvarUtilities::CvarHelp(const CCommand& args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get name of var to find
|
// Get name of var to find
|
||||||
search = args[1];
|
const char* const search = args[1];
|
||||||
|
|
||||||
// Search for it
|
// Search for it
|
||||||
var = g_pCVar->FindCommandBase(search);
|
const ConCommandBase* var = g_pCVar->FindCommandBase(search);
|
||||||
if (!var)
|
if (!var)
|
||||||
{
|
{
|
||||||
Msg(eDLL_T::COMMON, "help: no cvar or command named %s\n", search);
|
Msg(eDLL_T::COMMON, "help: no cvar or command named %s\n", search);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user