extensions can now be built for multiple engines, and will autoload from auto.X.Y folders
3 * =============================================================================
5 * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #ifndef _INCLUDE_SOURCEMOD_CONCMDMANAGER_H_
33 #define _INCLUDE_SOURCEMOD_CONCMDMANAGER_H_
35 #include "sm_globals.h"
36 #include "sourcemm_api.h"
37 #include "ForwardSys.h"
39 #include "sm_memtable.h"
41 #include <sh_string.h>
42 #include <IRootConsoleMenu.h>
43 #include <IAdminSystem.h>
45 using namespace SourceHook;
62 int cmdGrpId; /* index into cmdgroup string table */
63 FlagBits flags; /* default flags */
64 FlagBits eflags; /* effective flags */
74 IPluginFunction *pf; /* function hook */
75 String helptext; /* help text */
76 AdminCmdInfo *pAdmin; /* admin requirements, if any */
86 bool sourceMod; /**< Determines whether or not concmd was created by a SourceMod plugin */
87 ConCommand *pCmd; /**< Pointer to the command itself */
88 List<CmdHook *> srvhooks; /**< Hooks as a server command */
89 List<CmdHook *> conhooks; /**< Hooks as a console command */
90 AdminCmdInfo admin; /**< Admin info, if any */
91 bool is_admin_set; /**< Whether or not admin info is set */
96 public IRootConsoleCommand,
97 public IPluginsListener
99 #if defined ORANGEBOX_BUILD
100 friend void CommandCallback(const CCommand &command);
102 friend void CommandCallback();
107 public: //SMGlobalClass
108 void OnSourceModAllInitialized();
109 void OnSourceModShutdown();
110 public: //IPluginsListener
111 void OnPluginDestroyed(IPlugin *plugin);
112 public: //IRootConsoleCommand
113 void OnRootConsoleCommand(const char *cmdname, const CCommand &command);
115 bool AddServerCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
116 bool AddConsoleCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
117 bool AddAdminCommand(IPluginFunction *pFunction,
121 const char *description,
123 ResultType DispatchClientCommand(int client, const char *cmd, int args, ResultType type);
124 void UpdateAdminCmdFlags(const char *cmd, OverrideType type, FlagBits bits, bool remove);
125 bool LookForSourceModCommand(const char *cmd);
126 bool LookForCommandAdminFlags(const char *cmd, FlagBits *pFlags);
127 bool CheckCommandAccess(int client, const char *cmd, FlagBits flags);
129 void InternalDispatch(const CCommand &command);
130 ResultType RunAdminCommand(ConCmdInfo *pInfo, int client, int args);
131 ConCmdInfo *AddOrFindCommand(const char *name, const char *description, int flags);
132 void SetCommandClient(int client);
133 void AddToCmdList(ConCmdInfo *info);
134 void RemoveConCmd(ConCmdInfo *info);
135 void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
136 bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
138 inline int GetCommandClient()
142 inline const List<ConCmdInfo *> & GetCommandList()
147 Trie *m_pCmds; /* command lookup */
148 Trie *m_pCmdGrps; /* command group lookup */
149 List<ConCmdInfo *> m_CmdList; /* command list */
150 int m_CmdClient; /* current client */
151 BaseStringTable m_Strings; /* string table */
154 extern ConCmdManager g_ConCmds;
156 #endif // _INCLUDE_SOURCEMOD_CONCMDMANAGER_H_