plugins/include/clients.inc
author Kyle Sanderson <kyle.leet@gmail.com>
Sat Mar 16 23:12:40 2013 -0400 (2013-03-16)
changeset 3825 ecd2382ca37e
parent 3808 b5f4ea4d3736
child 3967 ceafb87d38a7
permissions -rw-r--r--
Added GetSteamAccountID function to IPlayerHelpers and native for sp (bug 5548, r=asherkin).
dvander@545
     1
/**
dvander@545
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
ds@1947
     4
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
ds@1330
     5
 * =============================================================================
ds@1330
     6
 *
ds@1330
     7
 * This file is part of the SourceMod/SourcePawn SDK.
dvander@545
     8
 *
ds@1330
     9
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    11
 * Free Software Foundation.
ds@1330
    12
 * 
ds@1330
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    16
 * details.
ds@1330
    17
 *
ds@1330
    18
 * You should have received a copy of the GNU General Public License along with
ds@1330
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ds@1330
    20
 *
ds@1330
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    28
 * or <http://www.sourcemod.net/license.php>.
dvander@545
    29
 *
dvander@545
    30
 * Version: $Id$
dvander@545
    31
 */
dvander@545
    32
dvander@545
    33
#if defined _clients_included
dvander@545
    34
 #endinput
dvander@545
    35
#endif
dvander@545
    36
#define _clients_included
dvander@545
    37
dvander@2054
    38
/**
dvander@2054
    39
 * Network flow directions.
dvander@2054
    40
 */
faluco@682
    41
enum NetFlow
faluco@682
    42
{
ds@873
    43
	NetFlow_Outgoing = 0,	/**< Outgoing traffic */
faluco@682
    44
	NetFlow_Incoming,		/**< Incoming traffic */
dvander@2054
    45
	NetFlow_Both,			/**< Both values added together */
faluco@682
    46
};
faluco@682
    47
dvander@2342
    48
/**
dvander@2342
    49
 * MAXPLAYERS is not the same as MaxClients.
dvander@2342
    50
 * MAXPLAYERS is a hardcoded value as an upper limit.  MaxClients changes based on the server.
dvander@2342
    51
 *
dvander@2342
    52
 * Both GetMaxClients() and MaxClients are only available once the map is loaded, and should 
dvander@2342
    53
 * not be used in OnPluginStart().
dvander@2342
    54
 */
dvander@2342
    55
skamonkey@3188
    56
#define MAXPLAYERS		65	/**< Maximum number of players SourceMod supports */
dvander@1343
    57
#define MAX_NAME_LENGTH 32	/**< Maximum buffer required to store a client name */
ds@901
    58
dvander@2342
    59
public const MaxClients;	/**< Maximum number of players the server supports (dynamic) */
dvander@2342
    60
dvander@545
    61
/**
dvander@2365
    62
 * Called on client connection.  If you return true, the client will be allowed in the server.
dvander@2365
    63
 * If you return false (or return nothing), the client will be rejected.  If the client is 
dvander@2365
    64
 * rejected by this forward or any other, OnClientDisconnect will not be called.
dvander@545
    65
 *
fyrenmoo@2696
    66
 * Note: Do not write to rejectmsg if you plan on returning true.  If multiple plugins write
fyrenmoo@2696
    67
 * to the string buffer, it is not defined which plugin's string will be shown to the client,
fyrenmoo@2696
    68
 * but it is guaranteed one of them will.
fyrenmoo@2696
    69
 *
dvander@1273
    70
 * @param client		Client index.
dvander@545
    71
 * @param rejectmsg		Buffer to store the rejection message when the connection is refused.
dvander@545
    72
 * @param maxlen		Maximum number of characters for rejection buffer.
dvander@545
    73
 * @return				True to validate client's connection, false to refuse it.
dvander@545
    74
 */
dvander@545
    75
forward bool:OnClientConnect(client, String:rejectmsg[], maxlen);
dvander@545
    76
dvander@545
    77
/**
dvander@2365
    78
 * Called once a client successfully connects.  This callback is paired with OnClientDisconnect.
dvander@2365
    79
 *
dvander@2365
    80
 * @param client		Client index.
dvander@2365
    81
 * @noreturn
dvander@2365
    82
 */
dvander@2365
    83
forward OnClientConnected(client);
dvander@2365
    84
dvander@2365
    85
/**
dvander@1813
    86
 * Called when a client is entering the game.
dvander@545
    87
 *
dvander@1813
    88
 * Whether a client has a steamid is undefined until OnClientAuthorized
dvander@1381
    89
 * is called, which may occur either before or after OnClientPutInServer.
dvander@1813
    90
 * Similarly, use OnClientPostAdminCheck() if you need to verify whether 
dvander@1813
    91
 * connecting players are admins.
dvander@1813
    92
 *
dvander@1813
    93
 * GetClientCount() will include clients as they are passed through this 
dvander@1813
    94
 * function, as clients are already in game at this point.
dvander@1381
    95
 *
dvander@1273
    96
 * @param client		Client index.
dvander@545
    97
 * @noreturn
dvander@545
    98
 */
dvander@545
    99
forward OnClientPutInServer(client);
dvander@545
   100
dvander@545
   101
/**
dvander@545
   102
 * Called when a client is disconnecting from the server.
dvander@545
   103
 *
dvander@1273
   104
 * @param client		Client index.
dvander@545
   105
 * @noreturn
dvander@545
   106
 */
dvander@545
   107
forward OnClientDisconnect(client);
dvander@545
   108
dvander@545
   109
/**
dvander@545
   110
 * Called when a client is disconnected from the server.
dvander@545
   111
 *
dvander@1273
   112
 * @param client		Client index.
dvander@545
   113
 * @noreturn
dvander@545
   114
 */
dvander@545
   115
forward OnClientDisconnect_Post(client);
dvander@545
   116
dvander@545
   117
/**
dvander@545
   118
 * Called when a client is sending a command.
dvander@545
   119
 *
dvander@2832
   120
 * As of SourceMod 1.3, the client is guaranteed to be in-game.
dvander@2832
   121
 * Use command listeners (console.inc) for more advanced hooks.
dvander@2832
   122
 *
dvander@1273
   123
 * @param client		Client index.
dvander@545
   124
 * @param args			Number of arguments.
dvander@545
   125
 * @noreturn
dvander@545
   126
 */
dvander@545
   127
forward Action:OnClientCommand(client, args);
dvander@545
   128
dvander@545
   129
/**
dvander@545
   130
 * Called whenever the client's settings are changed.
dvander@545
   131
 *
dvander@1273
   132
 * @param client		Client index.
dvander@545
   133
 * @noreturn
dvander@545
   134
 */
dvander@545
   135
forward OnClientSettingsChanged(client);
dvander@545
   136
dvander@545
   137
/**
dvander@1813
   138
 * Called when a client receives a Steam ID.  The state of a client's 
fyrenmoo@2672
   139
 * authorization as an admin is not guaranteed here.  Use 
fyrenmoo@2672
   140
 * OnClientPostAdminCheck() if you need a client's admin status.
dvander@1813
   141
 *
dvander@1273
   142
 * This is called by bots, but the ID will be "BOT".
dvander@545
   143
 *
dvander@1273
   144
 * @param client		Client index.
dvander@1273
   145
 * @param auth			Client auth string.
dvander@1273
   146
 * @noreturn
dvander@545
   147
 */
dvander@545
   148
forward OnClientAuthorized(client, const String:auth[]);
dvander@545
   149
dvander@545
   150
/**
dvander@1273
   151
 * Called once a client is authorized and fully in-game, but 
dvander@1273
   152
 * before admin checks are done.  This can be used to override 
dvander@1813
   153
 * the default admin checks for a client.  You should only use 
dvander@1813
   154
 * this for overriding; use OnClientPostAdminCheck() instead 
dvander@1813
   155
 * if you want notification.
dvander@1273
   156
 *
dvander@1273
   157
 * Note: If handled/blocked, PostAdminCheck must be signalled 
dvander@1273
   158
 * manually via NotifyPostAdminCheck().
dvander@1273
   159
 *
dvander@1813
   160
 * This callback is gauranteed to occur on all clients, and always 
dvander@1813
   161
 * after each OnClientPutInServer() call.
dvander@1813
   162
 *
dvander@1273
   163
 * @param client		Client index.
dvander@1273
   164
 * @return				Plugin_Handled to block admin checks.
dvander@1273
   165
 */
dvander@1273
   166
forward Action:OnClientPreAdminCheck(client);
dvander@1273
   167
dvander@1273
   168
/**
dvander@1831
   169
 * Called directly before OnClientPostAdminCheck() as a method to 
dvander@1831
   170
 * alter administrative permissions before plugins perform final 
dvander@1831
   171
 * post-connect operations.  
dvander@1831
   172
 *
dvander@1831
   173
 * In general, do not use this function unless you are specifically 
dvander@1831
   174
 * attempting to change access permissions.  Use OnClientPostAdminCheck() 
dvander@1831
   175
 * instead if you simply want to perform post-connect authorization 
dvander@1831
   176
 * routines.
dvander@1831
   177
 *
dvander@1831
   178
 * See OnClientPostAdminCheck() for more information.
dvander@1831
   179
 *
dvander@1831
   180
 * @param client		Client index.
dvander@1831
   181
 * @noreturn
dvander@1831
   182
 */
dvander@1831
   183
forward OnClientPostAdminFilter(client);
dvander@1831
   184
dvander@1831
   185
/**
dvander@1273
   186
 * Called once a client is authorized and fully in-game, and 
dvander@1813
   187
 * after all post-connection authorizations have been performed.  
dvander@1813
   188
 *
dvander@1813
   189
 * This callback is gauranteed to occur on all clients, and always 
dvander@1813
   190
 * after each OnClientPutInServer() call.
dvander@1273
   191
 *
dvander@1273
   192
 * @param client		Client index.
dvander@1273
   193
 * @noreturn
dvander@1273
   194
 */
dvander@1273
   195
forward OnClientPostAdminCheck(client);
dvander@1273
   196
dvander@1273
   197
/**
dvander@2342
   198
 * This function will be deprecated in a future release.  Use the MaxClients variable instead.
dvander@2342
   199
 *
dvander@1342
   200
 * Returns the maximum number of clients allowed on the server.  This may 
dvander@1342
   201
 * return 0 if called before OnMapStart(), and thus should not be called 
dvander@1342
   202
 * in OnPluginStart().  
dvander@545
   203
 *
dvander@2342
   204
 * You should not globally cache the value to GetMaxClients() because it can change from 
dvander@2342
   205
 * SourceTV or TF2's arena mode.  Use the "MaxClients" dynamic variable documented at the 
dvander@2342
   206
 * top of this file.
dvander@2342
   207
 *
dvander@545
   208
 * @return				Maximum number of clients allowed.
dvander@545
   209
 */
dvander@545
   210
native GetMaxClients();
dvander@545
   211
dvander@545
   212
/**
skamonkey@3696
   213
 * Returns the maximum number of human players allowed on the server.  This is 
skamonkey@3696
   214
 * a game-specific function used on newer games to limit the number of humans
skamonkey@3696
   215
 * that can join a game and can be lower than MaxClients. It is the number often
skamonkey@3696
   216
 * reflected in the server browser or when viewing the output of the status command.
skamonkey@3696
   217
 * On unsupported games or modes without overrides, it will return the same value
skamonkey@3696
   218
 * as MaxClients.
skamonkey@3696
   219
 *
skamonkey@3696
   220
 * You should not globally cache the value to GetMaxHumanPlayers() because it can change across
skamonkey@3696
   221
 * game modes. You may still cache it locally.
skamonkey@3696
   222
 *
skamonkey@3696
   223
 * @return				Maximum number of humans allowed.
skamonkey@3696
   224
 */
skamonkey@3696
   225
native GetMaxHumanPlayers();
skamonkey@3696
   226
skamonkey@3696
   227
/**
dvander@545
   228
 * Returns the client count put in the server.
dvander@545
   229
 *
dvander@545
   230
 * @param inGameOnly	If false connecting players are also counted.
dvander@545
   231
 * @return				Client count in the server.
dvander@545
   232
 */
dvander@545
   233
native GetClientCount(bool:inGameOnly=true);
dvander@545
   234
dvander@545
   235
/**
dvander@545
   236
 * Returns the client's name.
dvander@545
   237
 *
dvander@545
   238
 * @param client		Player index.
dvander@545
   239
 * @param name			Buffer to store the client's name.
dvander@545
   240
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@545
   241
 * @return				True on success, false otherwise.
dvander@545
   242
 * @error				If the client is not connected an error will be thrown.
dvander@545
   243
 */
dvander@545
   244
native bool:GetClientName(client, String:name[], maxlen);
dvander@545
   245
dvander@545
   246
/**
dvander@545
   247
 * Retrieves a client's IP address.
dvander@545
   248
 *
dvander@545
   249
 * @param client		Player index.
dvander@545
   250
 * @param name			Buffer to store the client's ip address.
dvander@545
   251
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@545
   252
 * @param remport		Remove client's port from the ip string (true by default).
dvander@545
   253
 * @return				True on success, false otherwise.
dvander@545
   254
 * @error				If the client is not connected or the index is invalid.
dvander@545
   255
 */
dvander@545
   256
native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true);
dvander@545
   257
dvander@545
   258
/**
dvander@545
   259
 * Retrieves a client's authentication string (SteamID).
dvander@545
   260
 *
dvander@545
   261
 * @param client		Player index.
dvander@545
   262
 * @param auth			Buffer to store the client's auth string.
dvander@545
   263
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
asherkin@3808
   264
 * @param validate		Check backend validation status.
asherkin@3808
   265
 * 				DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES,
asherkin@3808
   266
 *			        You WILL KNOW if you need to use this, MOST WILL NOT.
dvander@545
   267
 * @return				True on success, false otherwise.
dvander@545
   268
 * @error				If the client is not connected or the index is invalid.
dvander@545
   269
 */
asherkin@3808
   270
native bool:GetClientAuthString(client, String:auth[], maxlen, bool:validate=true);
dvander@545
   271
dvander@545
   272
/**
kyle@3825
   273
 * Returns the client's Steam account ID.
kyle@3825
   274
 *
kyle@3825
   275
 * @param client		Client Index.
kyle@3825
   276
 * @param validate		Check backend validation status.
kyle@3825
   277
 * 				DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES,
kyle@3825
   278
 *			        You WILL KNOW if you need to use this, MOST WILL NOT.
kyle@3825
   279
 * @return				Steam account ID or 0 if not available.
kyle@3825
   280
 * @error				If the client is not connected or the index is invalid.
kyle@3825
   281
 */
kyle@3825
   282
native GetSteamAccountID(client, bool:validate=true);
kyle@3825
   283
kyle@3825
   284
/**
dvander@545
   285
 * Retrieves a client's user id, which is an index incremented for every client
dvander@545
   286
 * that joins the server.
dvander@545
   287
 *
dvander@545
   288
 * @param client		Player index.
dvander@545
   289
 * @return				User id of the client.
dvander@545
   290
 * @error 				If the client is not connected or the index is invalid.
dvander@545
   291
 */
dvander@545
   292
native GetClientUserId(client);
dvander@545
   293
dvander@545
   294
/**
dvander@545
   295
 * Returns if a certain player is connected.
dvander@545
   296
 *
dvander@545
   297
 * @param client		Player index.
dvander@545
   298
 * @return				True if player is connected to the server, false otherwise.
dvander@545
   299
 */
dvander@545
   300
native bool:IsClientConnected(client);
dvander@545
   301
dvander@545
   302
/**
dvander@545
   303
 * Returns if a certain player has entered the game.
dvander@545
   304
 *
dvander@1509
   305
 * @param client		Player index (index does not have to be connected).
dvander@545
   306
 * @return				True if player has entered the game, false otherwise.
dvander@1509
   307
 * @error				Invalid client index.
dvander@545
   308
 */
ds@784
   309
native bool:IsClientInGame(client);
ds@784
   310
ds@784
   311
/**
dvander@1509
   312
 * Returns if a client is in the "kick queue" (i.e. the client will be kicked 
dvander@1509
   313
 * shortly and thus they should not appear as valid).
dvander@1509
   314
 *
dvander@1509
   315
 * @param client		Player index (must be connected).
dvander@1509
   316
 * @return				True if in the kick queue, false otherwise.
dvander@1509
   317
 * @error				Invalid client index.
dvander@1509
   318
 */
dvander@1509
   319
native bool:IsClientInKickQueue(client);
dvander@1509
   320
dvander@1509
   321
/**
ds@784
   322
 * Backwards compatibility stock - use IsClientInGame
ds@784
   323
 * @deprecated			Renamed to IsClientInGame
ds@784
   324
 */
ds@1268
   325
#pragma deprecated Use IsClientInGame() instead
ds@784
   326
stock bool:IsPlayerInGame(client)
ds@784
   327
{
ds@784
   328
	return IsClientInGame(client);
ds@784
   329
}
dvander@545
   330
dvander@545
   331
/**
dvander@545
   332
 * Returns if a certain player has been authenticated.
dvander@545
   333
 *
dvander@545
   334
 * @param client		Player index.
dvander@545
   335
 * @return				True if player has been authenticated, false otherwise.
dvander@545
   336
 */
dvander@545
   337
native bool:IsClientAuthorized(client);
dvander@545
   338
dvander@545
   339
/**
dvander@545
   340
 * Returns if a certain player is a fake client.
dvander@545
   341
 *
dvander@545
   342
 * @param client		Player index.
dvander@545
   343
 * @return				True if player is a fake client, false otherwise.
dvander@545
   344
 */
dvander@545
   345
native bool:IsFakeClient(client);
dvander@545
   346
dvander@545
   347
/**
skamonkey@3418
   348
 * Returns if a certain player is the SourceTV bot.
skamonkey@3418
   349
 *
skamonkey@3418
   350
 * @param client		Player index.
skamonkey@3418
   351
 * @return				True if player is the SourceTV bot, false otherwise.
skamonkey@3418
   352
 */
skamonkey@3418
   353
native bool:IsClientSourceTV(client);
skamonkey@3418
   354
skamonkey@3418
   355
/**
skamonkey@3418
   356
 * Returns if a certain player is the Replay bot.
skamonkey@3418
   357
 *
skamonkey@3418
   358
 * @param client		Player index.
skamonkey@3418
   359
 * @return				True if player is the Replay bot, false otherwise.
skamonkey@3418
   360
 */
skamonkey@3418
   361
native bool:IsClientReplay(client);
skamonkey@3418
   362
skamonkey@3418
   363
/**
ds@1001
   364
 * Returns if a certain player is an observer/spectator.
ds@1001
   365
 *
ds@1001
   366
 * @param client		Player index.
ds@1001
   367
 * @return				True if player is an obverser, false otherwise.
ds@1001
   368
 */
ds@1001
   369
native bool:IsClientObserver(client);
ds@1001
   370
ds@1001
   371
/**
dvander@1621
   372
 * Returns if the client is alive or dead.
dvander@1621
   373
 *
dvander@1621
   374
 * Note: This function was originally in SDKTools and was moved to core.
dvander@1621
   375
 *
dvander@1621
   376
 * @param client		Player's index.
dvander@1621
   377
 * @return				True if the client is alive, false otherwise.
dvander@1621
   378
 * @error				Invalid client index, client not in game, or no mod support.
dvander@1621
   379
 */
dvander@1621
   380
native bool:IsPlayerAlive(client);
dvander@1621
   381
dvander@1621
   382
/**
dvander@545
   383
 * Retrieves values from client replicated keys.
dvander@545
   384
 *
dvander@545
   385
 * @param client		Player's index.
dvander@545
   386
 * @param key			Key string.
dvander@545
   387
 * @param value			Buffer to store value.
dvander@545
   388
 * @param maxlen		Maximum length of valve (UTF-8 safe).
dvander@545
   389
 * @return 				True on success, false otherwise.
dvander@545
   390
 * @error				Invalid client index, or client not connected.
dvander@545
   391
 */
dvander@545
   392
native bool:GetClientInfo(client, const String:key[], String:value[], maxlen);
dvander@545
   393
dvander@545
   394
/**
dvander@644
   395
 * Retrieves a client's team index.
dvander@644
   396
 *
dvander@644
   397
 * @param client		Player's index.
dvander@644
   398
 * @return				Team index the client is on (mod specific).
dvander@644
   399
 * @error				Invalid client index, client not in game, or no mod support.
dvander@644
   400
 */
dvander@644
   401
native GetClientTeam(client);
dvander@644
   402
 
dvander@644
   403
/**
dvander@545
   404
 * Sets a client's AdminId.  
dvander@545
   405
 *
dvander@545
   406
 * @param client		Player's index.
dvander@545
   407
 * @param id			AdminId to set.  INVALID_ADMIN_ID removes admin permissions.
dvander@545
   408
 * @param temp			True if the id should be freed on disconnect.
dvander@545
   409
 * @noreturn
dvander@545
   410
 * @error				Invalid client index, client not connected, or bogus AdminId.
dvander@545
   411
 */
dvander@545
   412
native SetUserAdmin(client, AdminId:id, bool:temp=false);
dvander@545
   413
dvander@545
   414
/**
dvander@545
   415
 * Retrieves a client's AdminId.
dvander@545
   416
 *
dvander@545
   417
 * @param client		Player's index.
dvander@545
   418
 * @return				AdminId of the client, or INVALID_ADMIN_ID if none.
dvander@545
   419
 * @error				Invalid client index, or client not connected.
dvander@545
   420
 */
dvander@545
   421
native AdminId:GetUserAdmin(client);
dvander@545
   422
dvander@545
   423
/**
dvander@545
   424
 * Sets access flags on a client.  If the client is not an admin,
dvander@545
   425
 * a temporary, anonymous AdminId is given.
dvander@545
   426
 *
dvander@545
   427
 * @param client		Player's index.
dvander@545
   428
 * @param ...			Flags to set on the client.
dvander@545
   429
 * @noreturn
dvander@545
   430
 * @error				Invalid client index, or client not connected.
dvander@545
   431
 */
ds@634
   432
native AddUserFlags(client, AdminFlag:...);
dvander@545
   433
dvander@545
   434
/**
dvander@545
   435
 * Removes flags from a client.  If the client is not an admin,
dvander@545
   436
 * this has no effect.
dvander@545
   437
 *
dvander@545
   438
 * @param client		Player's index.
dvander@545
   439
 * @param ...			Flags to remove from the client.
dvander@545
   440
 * @noreturn
dvander@545
   441
 * @error				Invalid client index, or client not connected.
dvander@545
   442
 */
ds@634
   443
native RemoveUserFlags(client, AdminFlag:...);
dvander@545
   444
dvander@545
   445
/** 
dvander@545
   446
 * Sets access flags on a client using bits instead of flags.  If the
dvander@545
   447
 * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given.
dvander@545
   448
 *
dvander@545
   449
 * @param client		Player's index.
dvander@545
   450
 * @param flags			Bitstring of flags to set on client.
dvander@545
   451
 * @noreturn
dvander@545
   452
 */
dvander@545
   453
native SetUserFlagBits(client, flags);
dvander@545
   454
dvander@545
   455
/**
dvander@545
   456
 * Returns client access flags.  If the client is not an admin,
dvander@545
   457
 * the result is always 0.
dvander@545
   458
 * 
dvander@545
   459
 * @param client		Player's index.
dvander@545
   460
 * @return				Flags
dvander@545
   461
 * @error				Invalid client index, or client not connected.
dvander@545
   462
 */
dvander@545
   463
native GetUserFlagBits(client);
dvander@545
   464
dvander@545
   465
/**
dvander@545
   466
 * Returns whether a user can target another user.
dvander@545
   467
 * This is a helper function for CanAdminTarget.
dvander@545
   468
 *
dvander@545
   469
 * @param client		Player's index.
dvander@545
   470
 * @param target		Target player's index.
dvander@545
   471
 * @return				True if target is targettable by the player, false otherwise.
dvander@545
   472
 * @error				Invalid or unconnected player indexers.
dvander@545
   473
 */
dvander@545
   474
native bool:CanUserTarget(client, target);
dvander@545
   475
dvander@1273
   476
/**
dvander@1273
   477
 * Runs through the Core-defined admin authorization checks on a player.
dvander@1273
   478
 * Has no effect if the player is already an admin.
dvander@1273
   479
 *
dvander@1273
   480
 * Note: This function is based on the internal cache only.
dvander@1273
   481
 *
dvander@1273
   482
 * @param client		Client index.
dvander@1273
   483
 * @return				True if access was changed, false if it did not.
dvander@1273
   484
 * @error				Invalid client index or client not in-game AND authorized.
dvander@1273
   485
 */
dvander@1273
   486
native bool:RunAdminCacheChecks(client);
dvander@1273
   487
dvander@1273
   488
/**
dvander@1273
   489
 * Signals that a player has completed post-connection admin checks.
dvander@1273
   490
 * Has no effect if the player has already had this event signalled.
dvander@1273
   491
 *
dvander@1273
   492
 * Note: This must be sent even if no admin id was assigned.
dvander@1273
   493
 *
dvander@1273
   494
 * @param client		Client index.
dvander@1273
   495
 * @noreturn
dvander@1273
   496
 * @error				Invalid client index or client not in-game AND authorized.
dvander@1273
   497
 */
dvander@1273
   498
native NotifyPostAdminCheck(client);
dvander@1273
   499
dvander@545
   500
/** 
dvander@545
   501
 * Creates a fake client.
dvander@545
   502
 *
dvander@545
   503
 * @param name			Name to use.
dvander@545
   504
 * @return				Client index on success, 0 otherwise.
dvander@545
   505
 */
dvander@545
   506
native CreateFakeClient(const String:name[]);
dvander@545
   507
dvander@545
   508
/**
dvander@545
   509
 * Sets a convar value on a fake client.
dvander@545
   510
 *
dvander@545
   511
 * @param client		Client index.
dvander@545
   512
 * @param cvar			ConVar name.
dvander@545
   513
 * @param value			ConVar value.
dvander@545
   514
 * @noreturn
dvander@545
   515
 * @error				Invalid client index, client not connected,
dvander@545
   516
 *						or client not a fake client.
dvander@545
   517
 */
ds@621
   518
native SetFakeClientConVar(client, const String:cvar[], const String:value[]);
faluco@658
   519
faluco@658
   520
/**
faluco@658
   521
 * Returns the client's health.
faluco@658
   522
 *
faluco@658
   523
 * @param client		Player's index.
faluco@658
   524
 * @return				Health value.
faluco@658
   525
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   526
 */
faluco@658
   527
native GetClientHealth(client);
faluco@658
   528
faluco@658
   529
/**
faluco@658
   530
 * Returns the client's model name.
faluco@658
   531
 *
faluco@658
   532
 * @param client		Player's index.
faluco@658
   533
 * @param model			Buffer to store the client's model name.
faluco@658
   534
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
faluco@658
   535
 * @noreturn
faluco@658
   536
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   537
 */
faluco@658
   538
native GetClientModel(client, String:model[], maxlen);
faluco@658
   539
faluco@658
   540
/**
faluco@658
   541
 * Returns the client's weapon name.
faluco@658
   542
 *
faluco@658
   543
 * @param client		Player's index.
faluco@658
   544
 * @param weapon		Buffer to store the client's weapon name.
faluco@658
   545
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
faluco@658
   546
 * @noreturn
faluco@658
   547
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   548
 */
faluco@658
   549
native GetClientWeapon(client, String:weapon[], maxlen);
faluco@658
   550
faluco@658
   551
/**
faluco@658
   552
 * Returns the client's max size vector.
faluco@658
   553
 *
faluco@658
   554
 * @param client		Player's index.
faluco@658
   555
 * @param vec			Destination vector to store the client's max size.
faluco@658
   556
 * @noreturn
faluco@658
   557
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   558
 */
faluco@658
   559
native GetClientMaxs(client, Float:vec[3]);
faluco@658
   560
faluco@658
   561
/**
faluco@658
   562
 * Returns the client's min size vector.
faluco@658
   563
 *
faluco@658
   564
 * @param client		Player's index.
faluco@658
   565
 * @param vec			Destination vector to store the client's min size.
faluco@658
   566
 * @noreturn
faluco@658
   567
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   568
 */
faluco@658
   569
native GetClientMins(client, Float:vec[3]);
faluco@658
   570
faluco@658
   571
/**
faluco@658
   572
 * Returns the client's position angle.
faluco@658
   573
 *
faluco@658
   574
 * @param client		Player's index.
faluco@658
   575
 * @param ang			Destination vector to store the client's position angle.
faluco@658
   576
 * @noreturn
faluco@658
   577
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   578
 */
faluco@658
   579
native GetClientAbsAngles(client, Float:ang[3]);
faluco@658
   580
faluco@658
   581
/**
faluco@658
   582
 * Returns the client's origin vector.
faluco@658
   583
 *
faluco@658
   584
 * @param client		Player's index.
faluco@658
   585
 * @param vec			Destination vector to store the client's origin vector.
faluco@658
   586
 * @noreturn
faluco@658
   587
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   588
 */
faluco@658
   589
native GetClientAbsOrigin(client, Float:vec[3]);
faluco@658
   590
faluco@658
   591
/**
faluco@658
   592
 * Returns the client's armor.
faluco@658
   593
 *
faluco@658
   594
 * @param client		Player's index.
faluco@658
   595
 * @return				Armor value.
faluco@658
   596
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   597
 */
faluco@658
   598
native GetClientArmor(client);
faluco@658
   599
faluco@658
   600
/**
faluco@658
   601
 * Returns the client's death count.
faluco@658
   602
 *
faluco@658
   603
 * @param client		Player's index.
faluco@658
   604
 * @return				Death count.
faluco@658
   605
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   606
 */
faluco@658
   607
native GetClientDeaths(client);
faluco@658
   608
faluco@658
   609
/**
faluco@658
   610
 * Returns the client's frag count.
faluco@658
   611
 *
faluco@658
   612
 * @param client		Player's index.
faluco@658
   613
 * @return				Frag count.
faluco@658
   614
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   615
 */
faluco@658
   616
native GetClientFrags(client);
faluco@682
   617
faluco@682
   618
/**
faluco@682
   619
 * Returns the client's send data rate in bytes/sec.
faluco@682
   620
 *
faluco@682
   621
 * @param client		Player's index.
faluco@682
   622
 * @return				Data rate.
faluco@682
   623
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   624
 */
dvander@691
   625
native GetClientDataRate(client);
faluco@682
   626
faluco@682
   627
/**
faluco@682
   628
 * Returns if a client is timing out
faluco@682
   629
 *
faluco@682
   630
 * @param client		Player's index.
faluco@682
   631
 * @return				True if client is timing out, false otherwise.
faluco@682
   632
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   633
 */
dvander@691
   634
native bool:IsClientTimingOut(client);
faluco@682
   635
faluco@682
   636
/**
faluco@682
   637
 * Returns the client's connection time in seconds.
faluco@682
   638
 *
faluco@682
   639
 * @param client		Player's index.
faluco@682
   640
 * @return				Connection time.
faluco@682
   641
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   642
 */
dvander@691
   643
native Float:GetClientTime(client);
faluco@682
   644
faluco@682
   645
/**
faluco@682
   646
 * Returns the client's current latency (RTT), more accurate than GetAvgLatency but jittering.
faluco@682
   647
 *
faluco@682
   648
 * @param client		Player's index.
faluco@682
   649
 * @param flow			Traffic flowing direction.
dvander@2961
   650
 * @return				Latency, or -1 if network info is not available.
faluco@682
   651
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   652
 */
dvander@691
   653
native Float:GetClientLatency(client, NetFlow:flow);
faluco@682
   654
faluco@682
   655
/**
faluco@682
   656
 * Returns the client's average packet latency in seconds.
faluco@682
   657
 *
faluco@682
   658
 * @param client		Player's index.
faluco@682
   659
 * @param flow			Traffic flowing direction.
dvander@2961
   660
 * @return				Latency, or -1 if network info is not available.
faluco@682
   661
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   662
 */
dvander@691
   663
native Float:GetClientAvgLatency(client, NetFlow:flow);
faluco@682
   664
faluco@682
   665
/**
faluco@682
   666
 * Returns the client's average packet loss, values go from 0 to 1 (for percentages).
faluco@682
   667
 *
faluco@682
   668
 * @param client		Player's index.
faluco@682
   669
 * @param flow			Traffic flowing direction.
dvander@2961
   670
 * @return				Average packet loss, or -1 if network info is not available.
faluco@682
   671
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   672
 */
dvander@691
   673
native Float:GetClientAvgLoss(client, NetFlow:flow);
faluco@682
   674
faluco@682
   675
/**
faluco@682
   676
 * Returns the client's average packet choke, values go from 0 to 1 (for percentages).
faluco@682
   677
 *
faluco@682
   678
 * @param client		Player's index.
faluco@682
   679
 * @param flow			Traffic flowing direction.
dvander@2961
   680
 * @return				Average packet loss, or -1 if network info is not available.
faluco@682
   681
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   682
 */
dvander@691
   683
native Float:GetClientAvgChoke(client, NetFlow:flow);
faluco@682
   684
faluco@682
   685
/**
faluco@682
   686
 * Returns the client's data flow in bytes/sec.
faluco@682
   687
 *
faluco@682
   688
 * @param client		Player's index.
faluco@682
   689
 * @param flow			Traffic flowing direction.
faluco@682
   690
 * @return				Data flow.
faluco@682
   691
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   692
 */
dvander@691
   693
native Float:GetClientAvgData(client, NetFlow:flow);
faluco@682
   694
faluco@682
   695
/**
faluco@682
   696
 * Returns the client's average packet frequency in packets/sec.
faluco@682
   697
 *
faluco@682
   698
 * @param client		Player's index.
faluco@682
   699
 * @param flow			Traffic flowing direction.
faluco@682
   700
 * @return				Packet frequency.
faluco@682
   701
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   702
 */
dvander@691
   703
native Float:GetClientAvgPackets(client, NetFlow:flow);
faluco@682
   704
faluco@682
   705
/**
faluco@682
   706
 * Translates an userid index to the real player index.
faluco@682
   707
 *
faluco@682
   708
 * @param userid		Userid value.
faluco@682
   709
 * @return				Client value.
faluco@682
   710
 * @error				Returns 0 if invalid userid.
faluco@682
   711
 */
faluco@682
   712
native GetClientOfUserId(userid);
ds@992
   713
ds@992
   714
/**
dvander@2162
   715
 * Disconnects a client from the server as soon as the next frame starts.
dvander@2162
   716
 *
dvander@2162
   717
 * Note: Originally, KickClient() was immediate.  The delay was introduced 
dvander@2162
   718
 * because despite warnings, plugins were using it in ways that would crash. 
dvander@2162
   719
 * The new safe version can break cases that rely on immediate disconnects, 
dvander@2162
   720
 * but ensures that plugins do not accidentally cause crashes.
dvander@2162
   721
 *
dvander@2162
   722
 * If you need immediate disconnects, use KickClientEx().
dvander@2162
   723
 *
dvander@2162
   724
 * Note: IsClientInKickQueue() will return true before the kick occurs.
dvander@2162
   725
 *
dvander@2162
   726
 * @param client		Client index.
dvander@2162
   727
 * @param format		Optional formatting rules for disconnect reason.
dvander@2162
   728
 *                      Note that a period is automatically appended to the string by the engine.
dvander@2162
   729
 * @param ...			Variable number of format parameters.
dvander@2162
   730
 * @noreturn
dvander@2162
   731
 * @error				Invalid client index, or client not connected.
dvander@2162
   732
 */
dvander@2162
   733
native KickClient(client, const String:format[]="", any:...);
dvander@2162
   734
dvander@2162
   735
/**
dvander@2162
   736
 * Immediately disconnects a client from the server.
dvander@1346
   737
 *
dvander@1346
   738
 * Kicking clients from certain events or callbacks may cause crashes.  If in 
dvander@1346
   739
 * doubt, create a short (0.1 second) timer to kick the client in the next 
dvander@1346
   740
 * available frame.
ds@992
   741
 *
ds@992
   742
 * @param client		Client index.
ds@992
   743
 * @param format		Optional formatting rules for disconnect reason.
ds@992
   744
 *                      Note that a period is automatically appended to the string by the engine.
ds@992
   745
 * @param ...			Variable number of format parameters.
ds@992
   746
 * @noreturn
ds@992
   747
 * @error				Invalid client index, or client not connected.
ds@992
   748
 */
dvander@2162
   749
native KickClientEx(client, const String:format[]="", any:...);
dvander@1033
   750
dvander@1033
   751
/**
dvander@1033
   752
 * Changes a client's team through the mod's generic team changing function.
dvander@1033
   753
 * On CS:S, this will kill the player.
dvander@1033
   754
 *
dvander@1033
   755
 * @param client		Client index.
dvander@1033
   756
 * @param team			Mod-specific team index.
dvander@1033
   757
 * @noreturn
dvander@1033
   758
 * @error				Invalid client index, client not connected, or lack of 
dvander@1033
   759
 *						mod support.
dvander@1033
   760
 */
dvander@1033
   761
native ChangeClientTeam(client, team);
dvander@1423
   762
pred@2591
   763
/**
pred@2591
   764
 * Returns the clients unique serial identifier.
pred@2591
   765
 *
pred@2591
   766
 * @return	Serial number.
pred@2591
   767
 */
pred@2591
   768
native GetClientSerial(client);
pred@2591
   769
pred@2591
   770
/**
pred@2591
   771
 * Returns the client index by its serial number.
pred@2591
   772
 *
pred@2591
   773
 * @return				Client index, or 0 for invalid serial.
pred@2591
   774
 */
pred@2591
   775
native GetClientFromSerial(serial);
pred@2591
   776