plugins/include/console.inc
author David Anderson <dvander@alliedmods.net>
Fri Sep 14 02:11:10 2007 +0000 (2007-09-14)
changeset 1423 e73b3563f254
parent 1421 9f41aad265cf
child 1469 300cc2432356
permissions -rw-r--r--
- added 3 new natives for banning/unbanning and interception
- moved banning commands into new plugin, basebans
- improved quality and input methods of ban commands
- corrected svn props on a few files
- added an IsLANServer() to IGameHelpers API
- completely deprecated and removed old banning forwards
     1 /**
     2  * vim: set ts=4 :
     3  * =============================================================================
     4  * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
     5  * =============================================================================
     6  *
     7  * This file is part of the SourceMod/SourcePawn SDK.
     8  *
     9  * This program is free software; you can redistribute it and/or modify it under
    10  * the terms of the GNU General Public License, version 3.0, as published by the
    11  * Free Software Foundation.
    12  * 
    13  * This program is distributed in the hope that it will be useful, but WITHOUT
    14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    15  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    16  * details.
    17  *
    18  * You should have received a copy of the GNU General Public License along with
    19  * this program.  If not, see <http://www.gnu.org/licenses/>.
    20  *
    21  * As a special exception, AlliedModders LLC gives you permission to link the
    22  * code of this program (as well as its derivative works) to "Half-Life 2," the
    23  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    24  * by the Valve Corporation.  You must obey the GNU General Public License in
    25  * all respects for all other code used.  Additionally, AlliedModders LLC grants
    26  * this exception to all derivative works.  AlliedModders LLC defines further
    27  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    28  * or <http://www.sourcemod.net/license.php>.
    29  *
    30  * Version: $Id$
    31  */
    32  
    33 #if defined _console_included
    34  #endinput
    35 #endif
    36 #define _console_included
    37 
    38 /**
    39  * Console variable bound values used with Get/SetConVarBounds()
    40  */
    41 enum ConVarBounds
    42 {
    43 	ConVarBound_Upper = 0,
    44 	ConVarBound_Lower
    45 };
    46 
    47 /**
    48  * Console variable query helper values.
    49  */
    50 enum QueryCookie
    51 {
    52 	QUERYCOOKIE_FAILED = 0,
    53 };
    54 
    55 /**
    56  * Reply sources for commands.
    57  */
    58 enum ReplySource
    59 {
    60 	SM_REPLY_TO_CONSOLE = 0,
    61 	SM_REPLY_TO_CHAT = 1,
    62 };
    63 
    64 /**
    65  * Console variable query result values.
    66  */
    67 enum ConVarQueryResult
    68 {
    69 	ConVarQuery_Okay = 0,				/**< Retrieval of client convar value was successful. */
    70 	ConVarQuery_NotFound,				/**< Client convar was not found. */
    71 	ConVarQuery_NotValid,				/**< A console command with the same name was found, but there is no convar. */
    72 	ConVarQuery_Protected				/**< Client convar was found, but it is protected. The server cannot retrieve its value. */
    73 };
    74 
    75 /**
    76  * @section Flags for console commands and console variables.  The descriptions 
    77  * for each constant come directly from the Source SDK.
    78  */
    79 #define FCVAR_NONE				0		/**< The default, no flags at all */
    80 #define FCVAR_UNREGISTERED		(1<<0)	/**< If this is set, don't add to linked list, etc. */
    81 #define FCVAR_LAUNCHER			(1<<1)	/**< Defined by launcher. */
    82 #define FCVAR_GAMEDLL			(1<<2)	/**< Defined by the game DLL. */
    83 #define FCVAR_CLIENTDLL			(1<<3)	/**< Defined by the client DLL. */
    84 #define FCVAR_MATERIAL_SYSTEM	(1<<4)	/**< Defined by the material system. */
    85 #define FCVAR_PROTECTED			(1<<5)	/**< It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value. */
    86 #define FCVAR_SPONLY			(1<<6)	/**< This cvar cannot be changed by clients connected to a multiplayer server. */
    87 #define	FCVAR_ARCHIVE			(1<<7)	/**< Set to cause it to be saved to vars.rc */
    88 #define	FCVAR_NOTIFY			(1<<8)	/**< Notifies players when changed. */
    89 #define	FCVAR_USERINFO			(1<<9)	/**< Changes the client's info string. */
    90 #define FCVAR_PRINTABLEONLY		(1<<10)	/**< This cvar's string cannot contain unprintable characters (e.g., used for player name, etc.) */
    91 #define FCVAR_UNLOGGED			(1<<11)	/**< If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log */
    92 #define FCVAR_NEVER_AS_STRING	(1<<12)	/**< Never try to print that cvar. */
    93 #define FCVAR_REPLICATED		(1<<13)	/**< Server setting enforced on clients. */
    94 #define FCVAR_CHEAT				(1<<14)	/**< Only useable in singleplayer / debug / multiplayer & sv_cheats */
    95 #define FCVAR_STUDIORENDER		(1<<15)	/**< Defined by the studiorender system. */
    96 #define FCVAR_DEMO				(1<<16)	/**< Record this cvar when starting a demo file. */
    97 #define FCVAR_DONTRECORD		(1<<17)	/**< Don't record these command in demo files. */
    98 #define FCVAR_PLUGIN			(1<<18)	/**< Defined by a 3rd party plugin. */
    99 #define FCVAR_DATACACHE			(1<<19)	/**< Defined by the datacache system. */
   100 #define FCVAR_TOOLSYSTEM		(1<<20)	/**< Defined by an IToolSystem library */
   101 #define FCVAR_FILESYSTEM		(1<<21)	/**< Defined by the file system. */
   102 #define FCVAR_NOT_CONNECTED		(1<<22)	/**< Cvar cannot be changed by a client that is connected to a server. */
   103 #define FCVAR_SOUNDSYSTEM		(1<<23)	/**< Defined by the soundsystem library. */
   104 #define FCVAR_ARCHIVE_XBOX		(1<<24)	/**< Cvar written to config.cfg on the Xbox. */
   105 #define FCVAR_INPUTSYSTEM		(1<<25)	/**< Defined by the inputsystem DLL. */
   106 #define FCVAR_NETWORKSYSTEM		(1<<26)	/**< Defined by the network system. */
   107 #define FCVAR_VPHYSICS			(1<<27)	/**< Defined by vphysics. */
   108 
   109 /**
   110  * @endsection
   111  */
   112 
   113 /**
   114  * Executes a server command as if it were on the server console (or RCON)
   115  *
   116  * @param format		Formatting rules.
   117  * @param ...			Variable number of format parameters.
   118  * @noreturn
   119  */
   120 native ServerCommand(const String:format[], any:...);
   121 
   122 /**
   123  * Inserts a server command at the beginning of the server command buffer.
   124  *
   125  * @param format		Formatting rules.
   126  * @param ...			Variable number of format parameters.
   127  * @noreturn
   128  */
   129 native InsertServerCommand(const String:format[], any:...);
   130 
   131 /**
   132  * Executes every command in the server's command buffer, rather than once per frame.
   133  *
   134  * @noreturn
   135  */
   136 native ServerExecute();
   137 
   138 /**
   139  * Executes a client command.  Note that this will not work on clients unless
   140  * they have cl_restrict_server_commands set to 0.
   141  *
   142  * @param client		Index of the client.
   143  * @param fmt			Format of the client command.
   144  * @param ...			Format parameters/
   145  * @noreturn
   146  * @error				Invalid client index, or client not connected.
   147  */
   148 native ClientCommand(client, const String:fmt[], any:...);
   149 
   150 /**
   151  * Executes a client command on the server without being networked.
   152  *
   153  * FakeClientCommand() overwrites the command tokenization buffer.  This can 
   154  * cause undesired effects because future calls to GetCmdArg* will return 
   155  * data from the FakeClientCommand(), not the parent command.  If you are in 
   156  * a hook where this matters (for example, a "say" hook), you should use 
   157  * FakeClientCommandEx() instead.
   158  *
   159  * @param client		Index of the client.
   160  * @param fmt			Format of the client command.
   161  * @param ...			Format parameters
   162  * @noreturn
   163  * @error				Invalid client index, or client not connected.
   164  */
   165 native FakeClientCommand(client, const String:fmt[], any:...);
   166 
   167 /**
   168  * Executes a client command on the server without being networked.  The 
   169  * execution of the client command is delayed by one frame to prevent any 
   170  * re-entrancy issues that might surface with FakeClientCommand().
   171  *
   172  * @param client		Index of the client.
   173  * @param fmt			Format of the client command.
   174  * @param ...			Format parameters
   175  * @noreturn
   176  * @error				Invalid client index, or client not connected.
   177  */
   178 native FakeClientCommandEx(client, const String:fmt[], any:...);
   179 
   180 /**
   181  * Sends a message to the server console.
   182  *
   183  * @param format		Formatting rules.
   184  * @param ...			Variable number of format parameters.
   185  * @noreturn
   186  */
   187 native PrintToServer(const String:format[], any:...);
   188 
   189 /**
   190  * Sends a message to a client's console.
   191  *
   192  * @param client		Client index.
   193  * @param format		Formatting rules.
   194  * @param ...			Variable number of format parameters.
   195  * @noreturn
   196  * @error				If the client is not connected an error will be thrown.
   197  */
   198 native PrintToConsole(client, const String:format[], any:...);
   199 
   200 /**
   201  * Reples to a message in a command.
   202  *
   203  * A client index of 0 will use PrintToServer().
   204  * If the command was from the console, PrintToConsole() is used.
   205  * If the command was from chat, PrintToChat() is used.
   206  *
   207  * @param client		Client index, or 0 for server.
   208  * @param format		Formatting rules.
   209  * @param ...			Variable number of format parameters.
   210  * @noreturn
   211  * @error				If the client is not connected or invalid.
   212  */
   213 native ReplyToCommand(client, const String:format[], any:...);
   214 
   215 /**
   216  * Returns the current reply source of a command.
   217  *
   218  * @return				ReplySource value.
   219  */
   220 native ReplySource:GetCmdReplySource();
   221 
   222 /**
   223  * Sets the current reply source of a command.
   224  *
   225  * Only use this if you know what you are doing.  You should save the old value
   226  * and restore it once you are done.
   227  *
   228  * @param source		New ReplySource value.
   229  * @return				Old ReplySource value.
   230  */
   231 native ReplySource:SetCmdReplySource(ReplySource:source);
   232 
   233 /**
   234  * Displays usage of an admin command to users depending on the 
   235  * setting of the sm_show_activity cvar.  Additionally, the client
   236  * who typed the command will receive the same text without any
   237  * client name prefix (as a confirmation).
   238  *
   239  * @param client		Client index doing the action, or 0 for server.
   240  * @param format		Formatting rules.
   241  * @param ...			Variable number of format parameters.
   242  * @noreturn
   243  * @error
   244  */
   245 native ShowActivity(client, const String:format[], any:...);
   246 
   247 /**
   248  * Same as ShowActivity(), except the tag parameter is used instead of
   249  * "[SM] " (note that you must supply any spacing).
   250  *
   251  * @param client		Client index doing the action, or 0 for server.
   252  * @param tag			Tag to display with.
   253  * @param format		Formatting rules.
   254  * @param ...			Variable number of format parameters.
   255  * @noreturn
   256  * @error
   257  */
   258 native ShowActivityEx(client, const String:tag[], const String:format[], any:...);
   259 
   260 /**
   261  * Called when a server-only command is invoked.  
   262  *
   263  * @params args			Number of arguments that were in the argument string.
   264  * @return				An Action value.  Not handling the command
   265  *						means that Source will report it as "not found."
   266  */
   267 functag SrvCmd Action:public(args);
   268 
   269 /**
   270  * Creates a server-only console command, or hooks an already existing one.  
   271  *
   272  * @param cmd			Name of the command to hook or create.
   273  * @param callback		A function to use as a callback for when the command is invoked.
   274  * @param description	Optional description to use for command creation.
   275  * @param flags			Optional flags to use for command creation.
   276  * @noreturn
   277  * @error				Command name is the same as an existing convar.
   278  */
   279 native RegServerCmd(const String:cmd[], SrvCmd:callback, const String:description[]="", flags=0);
   280 
   281 /**
   282  * Called when a generic console command is invoked.
   283  *
   284  * @param client		Index of the client, or 0 from the server.
   285  * @param args			Number of arguments that were in the argument string.
   286  * @return				An Action value.  Not handling the command
   287  *						means that Source will report it as "not found."
   288  */
   289 functag ConCmd Action:public(client, args);
   290 
   291 /**
   292  * Creates a console command, or hooks an already existing one.
   293  *
   294  * @param cmd			Name of the command to hook or create.
   295  * @param callback		A function to use as a callback for when the command is invoked.
   296  * @param description	Optional description to use for command creation.
   297  * @param flags			Optional flags to use for command creation.
   298  * @noreturn
   299  * @error				Command name is the same as an existing convar.
   300  */
   301 native RegConsoleCmd(const String:cmd[], ConCmd:callback, const String:description[]="", flags=0);
   302 
   303 /**
   304  * Creates a console command as an administrative command.  If the command does not exist,
   305  * it is created.  When this command is invoked, the access rights of the player are 
   306  * automatically checked before allowing it to continue.
   307  *
   308  * @param cmd			String containing command to register.
   309  * @param callback		A function to use as a callback for when the command is invoked.
   310  * @param adminflags	Administrative flags (bitstring) to use for permissions.
   311  * @param group			String containing the command group to use.  If empty,
   312  * 						the plugin's filename will be used instead.
   313  * @param description	Optional description to use for help.
   314  * @param flags			Optional console flags.
   315  * @noreturn
   316  * @error				Command name is the same as an existing convar.
   317  */
   318 native RegAdminCmd(const String:cmd[],
   319 					ConCmd:callback,
   320 					adminflags,
   321 					const String:description[]="",
   322 					const String:group[]="",
   323 					flags=0);
   324 					
   325 /**
   326  * Returns the number of arguments from the current console or server command.
   327  * @note Unlike the HL2 engine call, this does not include the command itself.
   328  *
   329  * @return				Number of arguments to the current command.
   330  */
   331 native GetCmdArgs();
   332 
   333 /**
   334  * Retrieves a command argument given its index, from the current console or 
   335  * server command.
   336  * @note Argument indexes start at 1; 0 retrieves the command name.
   337  *
   338  * @param argnum		Argument number to retrieve.
   339  * @param buffer		Buffer to use for storing the string.
   340  * @param maxlength		Maximum length of the buffer.
   341  * @return				Length of string written to buffer.
   342  */
   343 native GetCmdArg(argnum, String:buffer[], maxlength);
   344 
   345 /**
   346  * Retrieves the entire command argument string in one lump from the current 
   347  * console or server command.
   348  *
   349  * @param buffer		Buffer to use for storing the string.
   350  * @param maxlength		Maximum length of the buffer.
   351  * @return				Length of string written to buffer.
   352  */
   353 native GetCmdArgString(String:buffer[], maxlength);
   354 
   355 /**
   356  * Creates a new console variable.
   357  *
   358  * @param name			Name of new convar.
   359  * @param defaultValue	String containing the default value of new convar.
   360  * @param description	Optional description of the convar.
   361  * @param flags			Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details.
   362  * @param hasMin		Optional boolean that determines if the convar has a minimum value.
   363  * @param min			Minimum floating point value that the convar can have if hasMin is true.
   364  * @param hasMax		Optional boolean that determines if the convar has a maximum value.
   365  * @param max			Maximum floating point value that the convar can have if hasMax is true.
   366  * @return				A handle to the newly created convar. If the convar already exists, INVALID_HANDLE is returned.
   367  * @error				Convar name is blank or is the same as an existing console command.
   368  */
   369 native Handle:CreateConVar(const String:name[], const String:defaultValue[], const String:description[]="", flags=0, bool:hasMin=false, Float:min=0.0, bool:hasMax=false, Float:max=0.0);
   370 
   371 /**
   372  * Searches for a console variable.
   373  *
   374  * @param name			Name of convar to find.
   375  * @return				A handle to the convar if it is found. INVALID_HANDLE otherwise.
   376  */
   377 native Handle:FindConVar(const String:name[]);
   378 
   379 /**
   380  * Called when a console variable's value is changed.
   381  *
   382  * @param convar		Handle to the convar that was changed.
   383  * @param oldValue		String containing the value of the convar before it was changed.
   384  * @param newValue		String containing the new value of the convar.
   385  * @noreturn
   386  */
   387 functag ConVarChanged public(Handle:convar, const String:oldValue[], const String:newValue[]);
   388 
   389 /**
   390  * Creates a hook for when a console variable's value is changed.
   391  *
   392  * @param convar		Handle to the convar.
   393  * @param callback		An OnConVarChanged function pointer.
   394  * @noreturn
   395  * @error				Invalid or corrupt Handle or invalid callback function.
   396  */
   397 native HookConVarChange(Handle:convar, ConVarChanged:callback);
   398 
   399 /**
   400  * Removes a hook for when a console variable's value is changed.
   401  *
   402  * @param convar		Handle to the convar.
   403  * @param callback		An OnConVarChanged function pointer.
   404  * @noreturn
   405  * @error				Invalid or corrupt Handle, invalid callback function, or no active hook on convar.
   406  */
   407 native UnhookConVarChange(Handle:convar, ConVarChanged:callback);
   408 
   409 /**
   410  * Returns the boolean value of a console variable.
   411  *
   412  * @param convar		Handle to the convar.
   413  * @return				The boolean value of the convar.
   414  * @error				Invalid or corrupt Handle.
   415  */
   416 native bool:GetConVarBool(Handle:convar);
   417 
   418 /**
   419  * Sets the boolean value of a console variable.
   420  *
   421  * @param convar		Handle to the convar.
   422  * @param value			New boolean value.
   423  * @param replicate		If set to true, the new convar value will be set on all clients.
   424  *						This will only work if the convar has the FCVAR_REPLICATED flag
   425  *						and actually exists on clients.
   426  * @param notify		If set to true, clients will be notified that the convar has changed.
   427  *						This will only work if the convar has the FCVAR_NOTIFY flag.
   428  * @noreturn
   429  * @error				Invalid or corrupt Handle.
   430  */
   431 native SetConVarBool(Handle:convar, bool:value, bool:replicate=false, bool:notify=false);
   432 
   433 /**
   434  * Returns the integer value of a console variable.
   435  *
   436  * @param convar		Handle to the convar.
   437  * @return				The integer value of the convar.
   438  * @error				Invalid or corrupt Handle.
   439  */
   440 native GetConVarInt(Handle:convar);
   441 
   442 /**
   443  * Sets the integer value of a console variable.
   444  *
   445  * @param convar		Handle to the convar.
   446  * @param value			New integer value.
   447  * @param replicate		If set to true, the new convar value will be set on all clients.
   448  *						This will only work if the convar has the FCVAR_REPLICATED flag
   449  *						and actually exists on clients.
   450  * @param notify		If set to true, clients will be notified that the convar has changed.
   451  *						This will only work if the convar has the FCVAR_NOTIFY flag.
   452  * @noreturn
   453  * @error				Invalid or corrupt Handle.
   454  */
   455 native SetConVarInt(Handle:convar, value, bool:replicate=false, bool:notify=false);
   456 
   457 /**
   458  * Returns the floating point value of a console variable.
   459  *
   460  * @param convar		Handle to the convar.
   461  * @return				The floating point value of the convar.
   462  * @error				Invalid or corrupt Handle.
   463  */
   464 native Float:GetConVarFloat(Handle:convar);
   465 
   466 /**
   467  * Sets the floating point value of a console variable.
   468  *
   469  * @param convar		Handle to the convar.
   470  * @param value			New floating point value.
   471  * @param replicate		If set to true, the new convar value will be set on all clients.
   472  *						This will only work if the convar has the FCVAR_REPLICATED flag
   473  *						and actually exists on clients.
   474  * @param notify		If set to true, clients will be notified that the convar has changed.
   475  *						This will only work if the convar has the FCVAR_NOTIFY flag.
   476  * @noreturn
   477  * @error				Invalid or corrupt Handle.
   478  */
   479 native SetConVarFloat(Handle:convar, Float:value, bool:replicate=false, bool:notify=false);
   480 
   481 /**
   482  * Retrieves the string value of a console variable.
   483  *
   484  * @param convar		Handle to the convar.
   485  * @param value			Buffer to store the value of the convar.
   486  * @param maxlength		Maximum length of string buffer.
   487  * @noreturn
   488  * @error				Invalid or corrupt Handle.     
   489  */
   490 native GetConVarString(Handle:convar, String:value[], maxlength);
   491 
   492 /**
   493  * Sets the string value of a console variable.
   494  *
   495  * @param convar		Handle to the convar.
   496  * @param value			New string value.
   497  * @param replicate		If set to true, the new convar value will be set on all clients.
   498  *						This will only work if the convar has the FCVAR_REPLICATED flag
   499  *						and actually exists on clients.
   500  * @param notify		If set to true, clients will be notified that the convar has changed.
   501  *						This will only work if the convar has the FCVAR_NOTIFY flag.
   502  * @noreturn
   503  * @error				Invalid or corrupt Handle.
   504  */
   505 native SetConVarString(Handle:convar, const String:value[], bool:replicate=false, bool:notify=false);
   506 
   507 /**
   508  * Resets the console variable to its default value.
   509  *
   510  * @param convar		Handle to the convar.
   511  * @param replicate		If set to true, the new convar value will be set on all clients.
   512  *						This will only work if the convar has the FCVAR_REPLICATED flag
   513  *						and actually exists on clients.
   514  * @param notify		If set to true, clients will be notified that the convar has changed.
   515  *						This will only work if the convar has the FCVAR_NOTIFY flag.
   516  * @noreturn
   517  * @error				Invalid or corrupt Handle.
   518  */
   519 native ResetConVar(Handle:convar, bool:replicate=false, bool:notify=false);
   520 
   521 /**
   522  * Returns the bitstring of flags on a console variable.
   523  *
   524  * @param convar		Handle to the convar.
   525  * @return				A bitstring containing the FCVAR_* flags that are enabled.
   526  * @error				Invalid or corrupt Handle.
   527  */
   528 native GetConVarFlags(Handle:convar);
   529 
   530 /**
   531  * Sets the bitstring of flags on a console variable.
   532  *
   533  * @param convar		Handle to the convar.
   534  * @param flags			A bitstring containing the FCVAR_* flags to enable.
   535  * @noreturn
   536  * @error				Invalid or corrupt Handle.
   537  */
   538 native SetConVarFlags(Handle:convar, flags);
   539 
   540 /**
   541  * Retrieves the specified bound of a console variable.
   542  *
   543  * @param convar		Handle to the convar.
   544  * @param type			Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper.
   545  * @param value			By-reference cell to store the specified floating point bound value.
   546  * @return				True if the convar has the specified bound set, false otherwise.
   547  * @error				Invalid or corrupt Handle.
   548  */
   549 native bool:GetConVarBounds(Handle:convar, ConVarBounds:type, &Float:value);
   550 
   551 /**
   552  * Sets the specified bound of a console variable.
   553  *
   554  * @param convar		Handle to the convar.
   555  * @param type			Type of bound to set, ConVarBound_Lower or ConVarBound_Upper
   556  * @param set			If set to true, convar will use specified bound. If false, bound will be removed.
   557  * @param value			Floating point value to use as the specified bound.
   558  * @noreturn
   559  * @error				Invalid or corrupt Handle.
   560  */
   561 native SetConVarBounds(Handle:convar, ConVarBounds:type, bool:set, Float:value=0.0);
   562 
   563 /**
   564  * Retrieves the name of a console variable.
   565  *
   566  * @param convar		Handle to the convar.
   567  * @param value			Buffer to store the name of the convar.
   568  * @param maxlength		Maximum length of string buffer.
   569  * @noreturn
   570  * @error				Invalid or corrupt Handle.     
   571  */
   572 native GetConVarName(Handle:convar, const String:name[], maxlength);
   573 
   574 funcenum ConVarQueryFinished
   575 {	
   576 	/**
   577 	 * Called when a query to retrieve a client's console variable has finished.
   578 	 *
   579 	 * @param cookie		Unique identifier of query.
   580 	 * @param client		Player index.
   581 	 * @param result		Result of query that tells one whether or not query was successful.
   582 	 *						See ConVarQueryResult enum for more details.
   583 	 * @param convarName	Name of client convar that was queried.
   584 	 * @param convarValue	Value of client convar that was queried if successful. This will be "" if it was not.
   585 	 * @param value			Value that was passed when query was started.
   586 	 * @noreturn
   587 	 */
   588 	public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:value),
   589 	
   590 	/**
   591 	 * Called when a query to retrieve a client's console variable has finished.
   592 	 *
   593 	 * @param cookie		Unique identifier of query.
   594 	 * @param client		Player index.
   595 	 * @param result		Result of query that tells one whether or not query was successful.
   596 	 *						See ConVarQueryResult enum for more details.
   597 	 * @param convarName	Name of client convar that was queried.
   598 	 * @param convarValue	Value of client convar that was queried if successful. This will be "" if it was not.
   599 	 * @noreturn
   600 	 */
   601 	public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
   602 };
   603 
   604 /**
   605  * Starts a query to retrieve the value of a client's console variable.
   606  *
   607  * @param client		Player index.
   608  * @param name			Name of client convar to query.
   609  * @param callback		A function to use as a callback when the query has finished.
   610  * @param value			Optional value to pass to the callback function.
   611  * @return				A cookie that uniquely identifies the query. 
   612  *						Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot.
   613  */
   614 native QueryCookie:QueryClientConVar(client, const String:cvarName[], ConVarQueryFinished:callback, any:value=0);
   615 
   616 /**
   617  * Gets a command iterator.  Must be freed with CloseHandle().
   618  *
   619  * @return				A new command iterator.
   620  */
   621 native Handle:GetCommandIterator();
   622 
   623 /**
   624  * Reads a command iterator, then advances to the next command if any.
   625  * Only SourceMod specific commands are returned.
   626  *
   627  * @param iter			Command iterator Handle.
   628  * @param name			Name buffer.
   629  * @param nameLen		Name buffer size.
   630  * @param eflags		Effective default flags of a command.
   631  * @param desc			Command description buffer.
   632  * @param descLen		Command description buffer size.
   633  * @return				True on success, false if there are no more commands.
   634  */
   635 native bool:ReadCommandIterator(Handle:iter, 
   636 								String:name[], 
   637 								nameLen, 
   638 								&eflags=0, 
   639 								String:desc[]="", 
   640 								descLen=0);
   641 
   642 /**
   643  * Returns whether a client has access to a given command string.  The string 
   644  * can also be any override string, as overrides can be independent of 
   645  * commands.  This important feature essentially allows you to create custom 
   646  * flags using the override system.
   647  *
   648  * @param client		Client index.
   649  * @param command		Command name.  If the command is not found, the default 
   650  *						flags are used.
   651  * @param flags			Flag string to use as a default, if the command or override 
   652  *						is not found.
   653  * @param override_only	If true, SourceMod will not attempt to find a matching 
   654  *						command, and it will only use the default flags specified.
   655  *						Otherwise, SourceMod will ignore the default flags if 
   656  *						there is a matching admin command.
   657  * @return				True if the client has access, false otherwise.
   658  */
   659 native bool:CheckCommandAccess(client, 
   660 							   const String:command[],
   661 							   flags,
   662 							   bool:override_only=false);