@@ -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
824827void CConsole::TraverseChain (FCommandCallback *ppfnCallback, void **ppUserData)
0 commit comments