88#include " fmtstr.h"
99
1010// MODULES
11- #include " serveradmin_command_base .h"
11+ #include " serveradmin_register .h"
1212
1313// always comes last
1414#include " tier0/memdbgon.h"
1515
16+ #ifdef BDSBASE
17+
1618CBase_Admin *g_pBaseAdmin = NULL ;
1719bool g_bAdminSystem = false ;
1820
@@ -91,7 +93,7 @@ CBase_Admin::CBase_Admin()
9193 m_steamID = NULL ;
9294 m_permissions = NULL ;
9395
94- InitAdminCommands ();
96+ RegisterCommands ();
9597}
9698
9799CBase_Admin::~CBase_Admin ()
@@ -283,6 +285,8 @@ bool IsSteamIDAdmin( const char *steamID )
283285 return false ;
284286}
285287
288+ // ConVar sa_listenserverhostimmune("sa_listenserverhostimmune", "1", FCVAR_DEVELOPMENTONLY);
289+
286290// -----------------------------------------------------------------------------
287291// Purpose: Check if a player has admin permissions
288292// -----------------------------------------------------------------------------
@@ -291,7 +295,7 @@ bool CBase_Admin::IsPlayerAdmin( CBasePlayer *pPlayer, const char *requiredFlags
291295 if ( !pPlayer )
292296 return false ;
293297
294- if ( !engine->IsDedicatedServer () && pPlayer == UTIL_GetListenServerHost () )
298+ if (!engine->IsDedicatedServer () && pPlayer == UTIL_GetListenServerHost ())
295299 {
296300 // We only need to see this once
297301 if ( !bIsListenServerMsg )
@@ -470,6 +474,8 @@ int CBase_Admin::GetRedNumber()
470474 return TEAM_REBELS;
471475#elif TF_DLL
472476 return TF_TEAM_RED;
477+ #else
478+ return TEAM_UNASSIGNED;
473479#endif
474480}
475481
@@ -479,6 +485,8 @@ int CBase_Admin::GetBlueNumber()
479485 return TEAM_COMBINE;
480486#elif TF_DLL
481487 return TF_TEAM_BLUE;
488+ #else
489+ return TEAM_UNASSIGNED;
482490#endif
483491}
484492
@@ -755,13 +763,13 @@ bool CBase_Admin::FindSpecialTargetGroup( const char *targetSpecifier )
755763// -----------------------------------------------------------------------------
756764AdminCommandFunction FindAdminCommand (const char * cmd)
757765{
758- FOR_EACH_VEC (BaseAdmin ()->g_AdminCommands , i)
766+ FOR_EACH_VEC (BaseAdmin ()->GetCommands () , i)
759767 {
760- const CommandEntry& entry = BaseAdmin ()->g_AdminCommands [i];
768+ const CommandEntry * entry = BaseAdmin ()->GetCommands () [i];
761769
762- if (Q_stricmp (entry. chatCommand , cmd) == 0 )
770+ if (Q_stricmp (entry-> chatCommand , cmd) == 0 )
763771 {
764- return entry. function ;
772+ return entry-> function ;
765773 }
766774 }
767775
@@ -770,11 +778,11 @@ AdminCommandFunction FindAdminCommand(const char* cmd)
770778
771779bool IsCommandAllowed (const char * cmd, bool isServerConsole, CBasePlayer* pAdmin)
772780{
773- FOR_EACH_VEC (BaseAdmin ()->g_AdminCommands , i)
781+ FOR_EACH_VEC (BaseAdmin ()->GetCommands () , i)
774782 {
775- const CommandEntry& entry = BaseAdmin ()->g_AdminCommands [i];
783+ const CommandEntry * entry = BaseAdmin ()->GetCommands () [i];
776784
777- if (Q_stricmp (entry. chatCommand , cmd) == 0 )
785+ if (Q_stricmp (entry-> chatCommand , cmd) == 0 )
778786 {
779787 if (!isServerConsole)
780788 {
@@ -787,9 +795,22 @@ bool IsCommandAllowed(const char* cmd, bool isServerConsole, CBasePlayer* pAdmin
787795
788796 if (!bImmunity)
789797 {
790- if (! CBase_Admin::IsPlayerAdmin (pAdmin, entry. requiredFlags ) )
798+ if (strchr ( entry-> requiredFlags , ADMIN_UNDEFINED) != NULL )
791799 {
792- return false ;
800+ return true ;
801+ }
802+
803+ if (!CBase_Admin::IsPlayerAdmin (pAdmin, entry->requiredFlags ))
804+ {
805+ // do we at least have the b flag?
806+ if (CBase_Admin::IsPlayerAdmin (pAdmin, " b" ))
807+ {
808+ return true ;
809+ }
810+ else
811+ {
812+ return false ;
813+ }
793814 }
794815 }
795816 }
@@ -803,39 +824,6 @@ bool IsCommandAllowed(const char* cmd, bool isServerConsole, CBasePlayer* pAdmin
803824 return false ;
804825}
805826
806- void PrintCommandHelpStrings (bool isServerConsole, CBasePlayer *pAdmin)
807- {
808- const char * szTitle = " [Server Admin] Usage: sa <command> [arguments]\n ==============================================\n\n " ;
809-
810- if (isServerConsole)
811- {
812- Msg (szTitle);
813- }
814- else
815- {
816- ClientPrint (pAdmin, HUD_PRINTCONSOLE, szTitle);
817- }
818-
819- FOR_EACH_VEC (BaseAdmin ()->g_AdminCommands , i)
820- {
821- const CommandEntry& entry = BaseAdmin ()->g_AdminCommands [i];
822-
823- if (IsCommandAllowed (entry.chatCommand , isServerConsole, pAdmin))
824- {
825- const char * szMsg = UTIL_VarArgs (" [%s] %s %s\n " , entry.moduleName , entry.chatCommand , entry.helpMessage );
826-
827- if (isServerConsole)
828- {
829- Msg (szMsg);
830- }
831- else
832- {
833- ClientPrint (pAdmin, HUD_PRINTCONSOLE, szMsg);
834- }
835- }
836- }
837- }
838-
839827// -----------------------------------------------------------------------------
840828// Purpose: Initialize the admin system (parse the file, add admins, register commands)
841829// -----------------------------------------------------------------------------
@@ -901,11 +889,6 @@ void CBase_Admin::InitAdminSystem()
901889 }
902890}
903891
904- void CBase_Admin::InitAdminCommands ()
905- {
906- LoadBaseCommandModule ();
907- }
908-
909892// -----------------------------------------------------------------------------
910893// Purpose: Checks chat for certain strings (chat commands)
911894// -----------------------------------------------------------------------------
@@ -925,30 +908,30 @@ void CBase_Admin::CheckChatText( char *p, int bufsize )
925908
926909 FOR_EACH_VEC (g_pBaseAdmin->g_AdminCommands , i)
927910 {
928- const CommandEntry& entry = g_pBaseAdmin->g_AdminCommands [i];
911+ const CommandEntry * entry = g_pBaseAdmin->g_AdminCommands [i];
929912
930- size_t cmdLen = strlen (entry. chatCommand );
931- if (Q_strncmp (p, entry. chatCommand , cmdLen) == 0 )
913+ size_t cmdLen = strlen (entry-> chatCommand );
914+ if (Q_strncmp (p, entry-> chatCommand , cmdLen) == 0 )
932915 {
933916 char consoleCmd[256 ];
934917
935- if (entry. requiresArguments )
918+ if (entry-> requiresArguments )
936919 {
937920 const char * args = p + cmdLen;
938- Q_snprintf (consoleCmd, sizeof (consoleCmd), " %s%s" , entry. consoleCommand , args);
921+ Q_snprintf (consoleCmd, sizeof (consoleCmd), " %s%s" , entry-> consoleCommand , args);
939922 }
940923 else
941924 {
942- Q_snprintf (consoleCmd, sizeof (consoleCmd), " %s" , entry. consoleCommand );
925+ Q_snprintf (consoleCmd, sizeof (consoleCmd), " %s" , entry-> consoleCommand );
943926 }
944927
945928 if (pPlayer)
946929 {
947930 pPlayer->SetLastCommandWasFromChat (true );
948931 engine->ClientCommand (pPlayer->edict (), consoleCmd);
949- if (entry. consoleMessage )
932+ if (entry-> consoleMessage )
950933 {
951- ClientPrint (pPlayer, HUD_PRINTTALK, entry. consoleMessage );
934+ ClientPrint (pPlayer, HUD_PRINTTALK, entry-> consoleMessage );
952935 }
953936 }
954937 return ;
@@ -1044,4 +1027,18 @@ void CBase_Admin::LogAction( CBasePlayer *pAdmin, CBasePlayer *pTarget, const ch
10441027
10451028 filesystem->FPrintf ( g_AdminLogFile, " %s" , logEntry.Get () );
10461029 filesystem->Flush ( g_AdminLogFile );
1047- }
1030+ }
1031+
1032+ void CBase_Admin::ReloadCommands (void )
1033+ {
1034+ g_AdminCommands.PurgeAndDeleteElements ();
1035+ RegisterCommands ();
1036+ DevMsg (" Reloaded commands.\n " );
1037+ }
1038+
1039+ void ToggleModule_ChangeCallback (IConVar* pConVar, char const * pOldString, float flOldValue)
1040+ {
1041+ BaseAdmin ()->ReloadCommands ();
1042+ }
1043+
1044+ #endif
0 commit comments