Skip to content

Commit 0db5366

Browse files
authored
Make cmdlist list only commands without practice flag (ddnet#11666)
2 parents 18c7135 + 4a6590a commit 0db5366

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/engine/shared/console.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -772,21 +772,16 @@ void CConsole::ConCommandAccess(IResult *pResult, void *pUser)
772772
pConsole->Print(OUTPUT_LEVEL_STANDARD, "console", aBuf);
773773
}
774774

775-
void CConsole::ConCommandStatus(IResult *pResult, void *pUser)
775+
void CConsole::PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask)
776776
{
777-
CConsole *pConsole = static_cast<CConsole *>(pUser);
778777
char aBuf[240] = "";
779778
int Used = 0;
780-
std::optional<EAccessLevel> AccessLevel = AccessLevelToEnum(pResult->GetString(0));
781-
if(!AccessLevel.has_value())
782-
{
783-
log_error("console", "Invalid access level '%s'. Allowed values are admin, moderator, helper and all.", pResult->GetString(0));
784-
return;
785-
}
786779

787-
for(CCommand *pCommand = pConsole->m_pFirstCommand; pCommand; pCommand = pCommand->Next())
780+
for(CCommand *pCommand = m_pFirstCommand; pCommand; pCommand = pCommand->Next())
788781
{
789-
if(pCommand->m_Flags & pConsole->m_FlagMask && pCommand->GetAccessLevel() >= AccessLevel.value())
782+
if((pCommand->m_Flags & m_FlagMask) &&
783+
!(pCommand->m_Flags & ExcludeFlagMask) &&
784+
pCommand->GetAccessLevel() >= MinAccessLevel)
790785
{
791786
int Length = str_length(pCommand->m_pName);
792787
if(Used + Length + 2 < (int)(sizeof(aBuf)))
@@ -801,24 +796,32 @@ void CConsole::ConCommandStatus(IResult *pResult, void *pUser)
801796
}
802797
else
803798
{
804-
pConsole->Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
799+
Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
805800
str_copy(aBuf, pCommand->m_pName);
806801
Used = Length;
807802
}
808803
}
809804
}
810805
if(Used > 0)
811-
pConsole->Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
806+
Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
812807
}
813808

814-
void CConsole::ConUserCommandStatus(IResult *pResult, void *pUser)
809+
void CConsole::ConCommandStatus(IResult *pResult, void *pUser)
815810
{
816811
CConsole *pConsole = static_cast<CConsole *>(pUser);
817-
CResult Result(pResult->m_ClientId);
818-
Result.m_pCommand = "access_status";
819-
Result.AddArgument(AccessLevelToString(EAccessLevel::USER));
812+
std::optional<EAccessLevel> AccessLevel = AccessLevelToEnum(pResult->GetString(0));
813+
if(!AccessLevel.has_value())
814+
{
815+
log_error("console", "Invalid access level '%s'. Allowed values are admin, moderator, helper and all.", pResult->GetString(0));
816+
return;
817+
}
818+
pConsole->PrintCommandList(AccessLevel.value(), 0);
819+
}
820820

821-
CConsole::ConCommandStatus(&Result, pConsole);
821+
void CConsole::ConUserCommandStatus(IResult *pResult, void *pUser)
822+
{
823+
CConsole *pConsole = static_cast<CConsole *>(pUser);
824+
pConsole->PrintCommandList(EAccessLevel::USER, CMDFLAG_PRACTICE);
822825
}
823826

824827
void CConsole::TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData)

src/engine/shared/console.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class CConsole : public IConsole
7373
static void Con_Exec(IResult *pResult, void *pUserData);
7474
static void ConCommandAccess(IResult *pResult, void *pUser);
7575
static void ConCommandStatus(IConsole::IResult *pResult, void *pUser);
76+
void PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask);
7677

7778
void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
7879

0 commit comments

Comments
 (0)