3 * =============================================================================
5 * Copyright (C) 2004-2008 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>
44 #include "concmd_cleaner.h"
46 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 */
93 typedef List<ConCmdInfo *> ConCmdList;
97 public IRootConsoleCommand,
98 public IPluginsListener,
99 public IConCommandTracker
101 #if SOURCE_ENGINE == SE_DOTA
102 friend void CommandCallback(const CCommandContext &context, const CCommand &command);
103 #elif SOURCE_ENGINE >= SE_ORANGEBOX
104 friend void CommandCallback(const CCommand &command);
106 friend void CommandCallback();
111 public: //SMGlobalClass
112 void OnSourceModAllInitialized();
113 void OnSourceModShutdown();
114 public: //IPluginsListener
115 void OnPluginDestroyed(IPlugin *plugin);
116 public: //IRootConsoleCommand
117 void OnRootConsoleCommand(const char *cmdname, const CCommand &command);
118 public: //IConCommandTracker
119 void OnUnlinkConCommandBase(ConCommandBase *pBase, const char *name, bool is_read_safe);
121 bool AddServerCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
122 bool AddAdminCommand(IPluginFunction *pFunction,
126 const char *description,
128 ResultType DispatchClientCommand(int client, const char *cmd, int args, ResultType type);
129 void UpdateAdminCmdFlags(const char *cmd, OverrideType type, FlagBits bits, bool remove);
130 bool LookForSourceModCommand(const char *cmd);
131 bool LookForCommandAdminFlags(const char *cmd, FlagBits *pFlags);
132 bool CheckClientCommandAccess(int client, const char *cmd, FlagBits flags);
133 bool CheckAdminCommandAccess(AdminId adm, const char *cmd, FlagBits flags);
135 void InternalDispatch(const CCommand &command);
136 ResultType RunAdminCommand(ConCmdInfo *pInfo, int client, int args);
137 ConCmdInfo *AddOrFindCommand(const char *name, const char *description, int flags);
138 void SetCommandClient(int client);
139 void AddToCmdList(ConCmdInfo *info);
140 void RemoveConCmd(ConCmdInfo *info, const char *cmd, bool is_read_safe, bool untrack);
141 void RemoveConCmds(List<CmdHook *> &cmdlist);
142 void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
143 bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
146 ConCmdList::iterator FindInList(const char *name);
149 ConCmdInfo *FindInTrie(const char *name);
151 inline int GetCommandClient()
155 inline const List<ConCmdInfo *> & GetCommandList()
160 Trie *m_pCmds; /* command lookup */
161 Trie *m_pCmdGrps; /* command group lookup */
162 ConCmdList m_CmdList; /* command list */
163 int m_CmdClient; /* current client */
164 BaseStringTable m_Strings; /* string table */
167 extern ConCmdManager g_ConCmds;
169 #endif // _INCLUDE_SOURCEMOD_CONCMDMANAGER_H_