plugins/include/clients.inc
author David Anderson <dvander@alliedmods.net>
Sat Dec 22 08:57:08 2007 +0000 (2007-12-22)
changeset 1813 372939c88bc7
parent 1621 ac5d4c68a99a
child 1831 af5c93c936d7
permissions -rw-r--r--
fixed amb1305 by making OnClientPostAdminCheck() always occur after OnClientPutInServer(). this is now GUARANTEED. it was undefined before, however the usual case was opposite. if plugins were relying on this, they were written poorly and shouldn't have worked in the first place, especially with the threaded SQL plugin.
dvander@545
     1
/**
dvander@545
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
dvander@545
     4
 * SourceMod (C)2004-2007 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
faluco@682
    38
enum NetFlow
faluco@682
    39
{
ds@873
    40
	NetFlow_Outgoing = 0,	/**< Outgoing traffic */
faluco@682
    41
	NetFlow_Incoming,		/**< Incoming traffic */
faluco@682
    42
	NetFlow_Both			/**< Incoming and outgoing traffic */
faluco@682
    43
};
faluco@682
    44
ds@901
    45
#define MAXPLAYERS		64	/**< Maximum number of players that can be in server */
dvander@1343
    46
#define MAX_NAME_LENGTH 32	/**< Maximum buffer required to store a client name */
ds@901
    47
dvander@545
    48
/**
dvander@545
    49
 * Called on client connection.
dvander@545
    50
 *
dvander@1273
    51
 * @param client		Client index.
dvander@545
    52
 * @param rejectmsg		Buffer to store the rejection message when the connection is refused.
dvander@545
    53
 * @param maxlen		Maximum number of characters for rejection buffer.
dvander@545
    54
 * @return				True to validate client's connection, false to refuse it.
dvander@545
    55
 */
dvander@545
    56
forward bool:OnClientConnect(client, String:rejectmsg[], maxlen);
dvander@545
    57
dvander@545
    58
/**
dvander@1813
    59
 * Called when a client is entering the game.
dvander@545
    60
 *
dvander@1813
    61
 * Whether a client has a steamid is undefined until OnClientAuthorized
dvander@1381
    62
 * is called, which may occur either before or after OnClientPutInServer.
dvander@1813
    63
 * Similarly, use OnClientPostAdminCheck() if you need to verify whether 
dvander@1813
    64
 * connecting players are admins.
dvander@1813
    65
 *
dvander@1813
    66
 * GetClientCount() will include clients as they are passed through this 
dvander@1813
    67
 * function, as clients are already in game at this point.
dvander@1381
    68
 *
dvander@1273
    69
 * @param client		Client index.
dvander@545
    70
 * @noreturn
dvander@545
    71
 */
dvander@545
    72
forward OnClientPutInServer(client);
dvander@545
    73
dvander@545
    74
/**
dvander@545
    75
 * Called when a client is disconnecting from the server.
dvander@545
    76
 *
dvander@1273
    77
 * @param client		Client index.
dvander@545
    78
 * @noreturn
dvander@545
    79
 */
dvander@545
    80
forward OnClientDisconnect(client);
dvander@545
    81
dvander@545
    82
/**
dvander@545
    83
 * Called when a client is disconnected from the server.
dvander@545
    84
 *
dvander@1273
    85
 * @param client		Client index.
dvander@545
    86
 * @noreturn
dvander@545
    87
 */
dvander@545
    88
forward OnClientDisconnect_Post(client);
dvander@545
    89
dvander@545
    90
/**
dvander@545
    91
 * Called when a client is sending a command.
dvander@545
    92
 *
dvander@1273
    93
 * @param client		Client index.
dvander@545
    94
 * @param args			Number of arguments.
dvander@545
    95
 * @noreturn
dvander@545
    96
 */
dvander@545
    97
forward Action:OnClientCommand(client, args);
dvander@545
    98
dvander@545
    99
/**
dvander@545
   100
 * Called whenever the client's settings are changed.
dvander@545
   101
 *
dvander@1273
   102
 * @param client		Client index.
dvander@545
   103
 * @noreturn
dvander@545
   104
 */
dvander@545
   105
forward OnClientSettingsChanged(client);
dvander@545
   106
dvander@545
   107
/**
dvander@1813
   108
 * Called when a client receives a Steam ID.  The state of a client's 
dvander@1813
   109
 * authorization via Steam or as an admin is not guaranteed here.  
dvander@1813
   110
 * Use OnClientAuthorized() or OnClientPostAdminCheck() for those, 
dvander@1813
   111
 * respectively.
dvander@1813
   112
 *
dvander@1273
   113
 * This is called by bots, but the ID will be "BOT".
dvander@545
   114
 *
dvander@1273
   115
 * @param client		Client index.
dvander@1273
   116
 * @param auth			Client auth string.
dvander@1273
   117
 * @noreturn
dvander@545
   118
 */
dvander@545
   119
forward OnClientAuthorized(client, const String:auth[]);
dvander@545
   120
dvander@545
   121
/**
dvander@1273
   122
 * Called once a client is authorized and fully in-game, but 
dvander@1273
   123
 * before admin checks are done.  This can be used to override 
dvander@1813
   124
 * the default admin checks for a client.  You should only use 
dvander@1813
   125
 * this for overriding; use OnClientPostAdminCheck() instead 
dvander@1813
   126
 * if you want notification.
dvander@1273
   127
 *
dvander@1273
   128
 * Note: If handled/blocked, PostAdminCheck must be signalled 
dvander@1273
   129
 * manually via NotifyPostAdminCheck().
dvander@1273
   130
 *
dvander@1813
   131
 * This callback is gauranteed to occur on all clients, and always 
dvander@1813
   132
 * after each OnClientPutInServer() call.
dvander@1813
   133
 *
dvander@1273
   134
 * @param client		Client index.
dvander@1273
   135
 * @return				Plugin_Handled to block admin checks.
dvander@1273
   136
 */
dvander@1273
   137
forward Action:OnClientPreAdminCheck(client);
dvander@1273
   138
dvander@1273
   139
/**
dvander@1273
   140
 * Called once a client is authorized and fully in-game, and 
dvander@1813
   141
 * after all post-connection authorizations have been performed.  
dvander@1813
   142
 *
dvander@1813
   143
 * This callback is gauranteed to occur on all clients, and always 
dvander@1813
   144
 * after each OnClientPutInServer() call.
dvander@1273
   145
 *
dvander@1273
   146
 * @param client		Client index.
dvander@1273
   147
 * @noreturn
dvander@1273
   148
 */
dvander@1273
   149
forward OnClientPostAdminCheck(client);
dvander@1273
   150
dvander@1273
   151
/**
dvander@1342
   152
 * Returns the maximum number of clients allowed on the server.  This may 
dvander@1342
   153
 * return 0 if called before OnMapStart(), and thus should not be called 
dvander@1342
   154
 * in OnPluginStart().  
dvander@545
   155
 *
dvander@545
   156
 * @return				Maximum number of clients allowed.
dvander@545
   157
 */
dvander@545
   158
native GetMaxClients();
dvander@545
   159
dvander@545
   160
/**
dvander@545
   161
 * Returns the client count put in the server.
dvander@545
   162
 *
dvander@545
   163
 * @param inGameOnly	If false connecting players are also counted.
dvander@545
   164
 * @return				Client count in the server.
dvander@545
   165
 */
dvander@545
   166
native GetClientCount(bool:inGameOnly=true);
dvander@545
   167
dvander@545
   168
/**
dvander@545
   169
 * Returns the client's name.
dvander@545
   170
 *
dvander@545
   171
 * @param client		Player index.
dvander@545
   172
 * @param name			Buffer to store the client's name.
dvander@545
   173
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@545
   174
 * @return				True on success, false otherwise.
dvander@545
   175
 * @error				If the client is not connected an error will be thrown.
dvander@545
   176
 */
dvander@545
   177
native bool:GetClientName(client, String:name[], maxlen);
dvander@545
   178
dvander@545
   179
/**
dvander@545
   180
 * Retrieves a client's IP address.
dvander@545
   181
 *
dvander@545
   182
 * @param client		Player index.
dvander@545
   183
 * @param name			Buffer to store the client's ip address.
dvander@545
   184
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@545
   185
 * @param remport		Remove client's port from the ip string (true by default).
dvander@545
   186
 * @return				True on success, false otherwise.
dvander@545
   187
 * @error				If the client is not connected or the index is invalid.
dvander@545
   188
 */
dvander@545
   189
native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true);
dvander@545
   190
dvander@545
   191
/**
dvander@545
   192
 * Retrieves a client's authentication string (SteamID).
dvander@545
   193
 *
dvander@545
   194
 * @param client		Player index.
dvander@545
   195
 * @param auth			Buffer to store the client's auth string.
dvander@545
   196
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@545
   197
 * @return				True on success, false otherwise.
dvander@545
   198
 * @error				If the client is not connected or the index is invalid.
dvander@545
   199
 */
dvander@545
   200
native bool:GetClientAuthString(client, String:auth[], maxlen);
dvander@545
   201
dvander@545
   202
/**
dvander@545
   203
 * Retrieves a client's user id, which is an index incremented for every client
dvander@545
   204
 * that joins the server.
dvander@545
   205
 *
dvander@545
   206
 * @param client		Player index.
dvander@545
   207
 * @return				User id of the client.
dvander@545
   208
 * @error 				If the client is not connected or the index is invalid.
dvander@545
   209
 */
dvander@545
   210
native GetClientUserId(client);
dvander@545
   211
dvander@545
   212
/**
dvander@545
   213
 * Returns if a certain player is connected.
dvander@545
   214
 *
dvander@545
   215
 * @param client		Player index.
dvander@545
   216
 * @return				True if player is connected to the server, false otherwise.
dvander@545
   217
 */
dvander@545
   218
native bool:IsClientConnected(client);
dvander@545
   219
dvander@545
   220
/**
dvander@545
   221
 * Returns if a certain player has entered the game.
dvander@545
   222
 *
dvander@1509
   223
 * @param client		Player index (index does not have to be connected).
dvander@545
   224
 * @return				True if player has entered the game, false otherwise.
dvander@1509
   225
 * @error				Invalid client index.
dvander@545
   226
 */
ds@784
   227
native bool:IsClientInGame(client);
ds@784
   228
ds@784
   229
/**
dvander@1509
   230
 * Returns if a client is in the "kick queue" (i.e. the client will be kicked 
dvander@1509
   231
 * shortly and thus they should not appear as valid).
dvander@1509
   232
 *
dvander@1509
   233
 * @param client		Player index (must be connected).
dvander@1509
   234
 * @return				True if in the kick queue, false otherwise.
dvander@1509
   235
 * @error				Invalid client index.
dvander@1509
   236
 */
dvander@1509
   237
native bool:IsClientInKickQueue(client);
dvander@1509
   238
dvander@1509
   239
/**
ds@784
   240
 * Backwards compatibility stock - use IsClientInGame
ds@784
   241
 * @deprecated			Renamed to IsClientInGame
ds@784
   242
 */
ds@1268
   243
#pragma deprecated Use IsClientInGame() instead
ds@784
   244
stock bool:IsPlayerInGame(client)
ds@784
   245
{
ds@784
   246
	return IsClientInGame(client);
ds@784
   247
}
dvander@545
   248
dvander@545
   249
/**
dvander@545
   250
 * Returns if a certain player has been authenticated.
dvander@545
   251
 *
dvander@545
   252
 * @param client		Player index.
dvander@545
   253
 * @return				True if player has been authenticated, false otherwise.
dvander@545
   254
 */
dvander@545
   255
native bool:IsClientAuthorized(client);
dvander@545
   256
dvander@545
   257
/**
dvander@545
   258
 * Returns if a certain player is a fake client.
dvander@545
   259
 *
dvander@545
   260
 * @param client		Player index.
dvander@545
   261
 * @return				True if player is a fake client, false otherwise.
dvander@545
   262
 */
dvander@545
   263
native bool:IsFakeClient(client);
dvander@545
   264
dvander@545
   265
/**
ds@1001
   266
 * Returns if a certain player is an observer/spectator.
ds@1001
   267
 *
ds@1001
   268
 * @param client		Player index.
ds@1001
   269
 * @return				True if player is an obverser, false otherwise.
ds@1001
   270
 */
ds@1001
   271
native bool:IsClientObserver(client);
ds@1001
   272
ds@1001
   273
/**
dvander@1621
   274
 * Returns if the client is alive or dead.
dvander@1621
   275
 *
dvander@1621
   276
 * Note: This function was originally in SDKTools and was moved to core.
dvander@1621
   277
 *
dvander@1621
   278
 * @param client		Player's index.
dvander@1621
   279
 * @return				True if the client is alive, false otherwise.
dvander@1621
   280
 * @error				Invalid client index, client not in game, or no mod support.
dvander@1621
   281
 */
dvander@1621
   282
native bool:IsPlayerAlive(client);
dvander@1621
   283
dvander@1621
   284
/**
dvander@545
   285
 * Retrieves values from client replicated keys.
dvander@545
   286
 *
dvander@545
   287
 * @param client		Player's index.
dvander@545
   288
 * @param key			Key string.
dvander@545
   289
 * @param value			Buffer to store value.
dvander@545
   290
 * @param maxlen		Maximum length of valve (UTF-8 safe).
dvander@545
   291
 * @return 				True on success, false otherwise.
dvander@545
   292
 * @error				Invalid client index, or client not connected.
dvander@545
   293
 */
dvander@545
   294
native bool:GetClientInfo(client, const String:key[], String:value[], maxlen);
dvander@545
   295
dvander@545
   296
/**
dvander@644
   297
 * Retrieves a client's team index.
dvander@644
   298
 *
dvander@644
   299
 * @param client		Player's index.
dvander@644
   300
 * @return				Team index the client is on (mod specific).
dvander@644
   301
 * @error				Invalid client index, client not in game, or no mod support.
dvander@644
   302
 */
dvander@644
   303
native GetClientTeam(client);
dvander@644
   304
 
dvander@644
   305
/**
dvander@545
   306
 * Sets a client's AdminId.  
dvander@545
   307
 *
dvander@545
   308
 * @param client		Player's index.
dvander@545
   309
 * @param id			AdminId to set.  INVALID_ADMIN_ID removes admin permissions.
dvander@545
   310
 * @param temp			True if the id should be freed on disconnect.
dvander@545
   311
 * @noreturn
dvander@545
   312
 * @error				Invalid client index, client not connected, or bogus AdminId.
dvander@545
   313
 */
dvander@545
   314
native SetUserAdmin(client, AdminId:id, bool:temp=false);
dvander@545
   315
dvander@545
   316
/**
dvander@545
   317
 * Retrieves a client's AdminId.
dvander@545
   318
 *
dvander@545
   319
 * @param client		Player's index.
dvander@545
   320
 * @return				AdminId of the client, or INVALID_ADMIN_ID if none.
dvander@545
   321
 * @error				Invalid client index, or client not connected.
dvander@545
   322
 */
dvander@545
   323
native AdminId:GetUserAdmin(client);
dvander@545
   324
dvander@545
   325
/**
dvander@545
   326
 * Sets access flags on a client.  If the client is not an admin,
dvander@545
   327
 * a temporary, anonymous AdminId is given.
dvander@545
   328
 *
dvander@545
   329
 * @param client		Player's index.
dvander@545
   330
 * @param ...			Flags to set on the client.
dvander@545
   331
 * @noreturn
dvander@545
   332
 * @error				Invalid client index, or client not connected.
dvander@545
   333
 */
ds@634
   334
native AddUserFlags(client, AdminFlag:...);
dvander@545
   335
dvander@545
   336
/**
dvander@545
   337
 * Removes flags from a client.  If the client is not an admin,
dvander@545
   338
 * this has no effect.
dvander@545
   339
 *
dvander@545
   340
 * @param client		Player's index.
dvander@545
   341
 * @param ...			Flags to remove from the client.
dvander@545
   342
 * @noreturn
dvander@545
   343
 * @error				Invalid client index, or client not connected.
dvander@545
   344
 */
ds@634
   345
native RemoveUserFlags(client, AdminFlag:...);
dvander@545
   346
dvander@545
   347
/** 
dvander@545
   348
 * Sets access flags on a client using bits instead of flags.  If the
dvander@545
   349
 * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given.
dvander@545
   350
 *
dvander@545
   351
 * @param client		Player's index.
dvander@545
   352
 * @param flags			Bitstring of flags to set on client.
dvander@545
   353
 * @noreturn
dvander@545
   354
 */
dvander@545
   355
native SetUserFlagBits(client, flags);
dvander@545
   356
dvander@545
   357
/**
dvander@545
   358
 * Returns client access flags.  If the client is not an admin,
dvander@545
   359
 * the result is always 0.
dvander@545
   360
 * 
dvander@545
   361
 * @param client		Player's index.
dvander@545
   362
 * @return				Flags
dvander@545
   363
 * @error				Invalid client index, or client not connected.
dvander@545
   364
 */
dvander@545
   365
native GetUserFlagBits(client);
dvander@545
   366
dvander@545
   367
/**
dvander@545
   368
 * Returns whether a user can target another user.
dvander@545
   369
 * This is a helper function for CanAdminTarget.
dvander@545
   370
 *
dvander@545
   371
 * @param client		Player's index.
dvander@545
   372
 * @param target		Target player's index.
dvander@545
   373
 * @return				True if target is targettable by the player, false otherwise.
dvander@545
   374
 * @error				Invalid or unconnected player indexers.
dvander@545
   375
 */
dvander@545
   376
native bool:CanUserTarget(client, target);
dvander@545
   377
dvander@1273
   378
/**
dvander@1273
   379
 * Runs through the Core-defined admin authorization checks on a player.
dvander@1273
   380
 * Has no effect if the player is already an admin.
dvander@1273
   381
 *
dvander@1273
   382
 * Note: This function is based on the internal cache only.
dvander@1273
   383
 *
dvander@1273
   384
 * @param client		Client index.
dvander@1273
   385
 * @return				True if access was changed, false if it did not.
dvander@1273
   386
 * @error				Invalid client index or client not in-game AND authorized.
dvander@1273
   387
 */
dvander@1273
   388
native bool:RunAdminCacheChecks(client);
dvander@1273
   389
dvander@1273
   390
/**
dvander@1273
   391
 * Signals that a player has completed post-connection admin checks.
dvander@1273
   392
 * Has no effect if the player has already had this event signalled.
dvander@1273
   393
 *
dvander@1273
   394
 * Note: This must be sent even if no admin id was assigned.
dvander@1273
   395
 *
dvander@1273
   396
 * @param client		Client index.
dvander@1273
   397
 * @noreturn
dvander@1273
   398
 * @error				Invalid client index or client not in-game AND authorized.
dvander@1273
   399
 */
dvander@1273
   400
native NotifyPostAdminCheck(client);
dvander@1273
   401
dvander@545
   402
/** 
dvander@545
   403
 * Creates a fake client.
dvander@545
   404
 *
dvander@545
   405
 * @param name			Name to use.
dvander@545
   406
 * @return				Client index on success, 0 otherwise.
dvander@545
   407
 */
dvander@545
   408
native CreateFakeClient(const String:name[]);
dvander@545
   409
dvander@545
   410
/**
dvander@545
   411
 * Sets a convar value on a fake client.
dvander@545
   412
 *
dvander@545
   413
 * @param client		Client index.
dvander@545
   414
 * @param cvar			ConVar name.
dvander@545
   415
 * @param value			ConVar value.
dvander@545
   416
 * @noreturn
dvander@545
   417
 * @error				Invalid client index, client not connected,
dvander@545
   418
 *						or client not a fake client.
dvander@545
   419
 */
ds@621
   420
native SetFakeClientConVar(client, const String:cvar[], const String:value[]);
faluco@658
   421
faluco@658
   422
/**
faluco@658
   423
 * Returns the client's health.
faluco@658
   424
 *
faluco@658
   425
 * @param client		Player's index.
faluco@658
   426
 * @return				Health value.
faluco@658
   427
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   428
 */
faluco@658
   429
native GetClientHealth(client);
faluco@658
   430
faluco@658
   431
/**
faluco@658
   432
 * Returns the client's model name.
faluco@658
   433
 *
faluco@658
   434
 * @param client		Player's index.
faluco@658
   435
 * @param model			Buffer to store the client's model name.
faluco@658
   436
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
faluco@658
   437
 * @noreturn
faluco@658
   438
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   439
 */
faluco@658
   440
native GetClientModel(client, String:model[], maxlen);
faluco@658
   441
faluco@658
   442
/**
faluco@658
   443
 * Returns the client's weapon name.
faluco@658
   444
 *
faluco@658
   445
 * @param client		Player's index.
faluco@658
   446
 * @param weapon		Buffer to store the client's weapon name.
faluco@658
   447
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
faluco@658
   448
 * @noreturn
faluco@658
   449
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   450
 */
faluco@658
   451
native GetClientWeapon(client, String:weapon[], maxlen);
faluco@658
   452
faluco@658
   453
/**
faluco@658
   454
 * Returns the client's max size vector.
faluco@658
   455
 *
faluco@658
   456
 * @param client		Player's index.
faluco@658
   457
 * @param vec			Destination vector to store the client's max size.
faluco@658
   458
 * @noreturn
faluco@658
   459
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   460
 */
faluco@658
   461
native GetClientMaxs(client, Float:vec[3]);
faluco@658
   462
faluco@658
   463
/**
faluco@658
   464
 * Returns the client's min size vector.
faluco@658
   465
 *
faluco@658
   466
 * @param client		Player's index.
faluco@658
   467
 * @param vec			Destination vector to store the client's min size.
faluco@658
   468
 * @noreturn
faluco@658
   469
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   470
 */
faluco@658
   471
native GetClientMins(client, Float:vec[3]);
faluco@658
   472
faluco@658
   473
/**
faluco@658
   474
 * Returns the client's position angle.
faluco@658
   475
 *
faluco@658
   476
 * @param client		Player's index.
faluco@658
   477
 * @param ang			Destination vector to store the client's position angle.
faluco@658
   478
 * @noreturn
faluco@658
   479
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   480
 */
faluco@658
   481
native GetClientAbsAngles(client, Float:ang[3]);
faluco@658
   482
faluco@658
   483
/**
faluco@658
   484
 * Returns the client's origin vector.
faluco@658
   485
 *
faluco@658
   486
 * @param client		Player's index.
faluco@658
   487
 * @param vec			Destination vector to store the client's origin vector.
faluco@658
   488
 * @noreturn
faluco@658
   489
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   490
 */
faluco@658
   491
native GetClientAbsOrigin(client, Float:vec[3]);
faluco@658
   492
faluco@658
   493
/**
faluco@658
   494
 * Returns the client's armor.
faluco@658
   495
 *
faluco@658
   496
 * @param client		Player's index.
faluco@658
   497
 * @return				Armor value.
faluco@658
   498
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   499
 */
faluco@658
   500
native GetClientArmor(client);
faluco@658
   501
faluco@658
   502
/**
faluco@658
   503
 * Returns the client's death count.
faluco@658
   504
 *
faluco@658
   505
 * @param client		Player's index.
faluco@658
   506
 * @return				Death count.
faluco@658
   507
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   508
 */
faluco@658
   509
native GetClientDeaths(client);
faluco@658
   510
faluco@658
   511
/**
faluco@658
   512
 * Returns the client's frag count.
faluco@658
   513
 *
faluco@658
   514
 * @param client		Player's index.
faluco@658
   515
 * @return				Frag count.
faluco@658
   516
 * @error				Invalid client index, client not in game, or no mod support.
faluco@658
   517
 */
faluco@658
   518
native GetClientFrags(client);
faluco@682
   519
faluco@682
   520
/**
faluco@682
   521
 * Returns the client's send data rate in bytes/sec.
faluco@682
   522
 *
faluco@682
   523
 * @param client		Player's index.
faluco@682
   524
 * @return				Data rate.
faluco@682
   525
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   526
 */
dvander@691
   527
native GetClientDataRate(client);
faluco@682
   528
faluco@682
   529
/**
faluco@682
   530
 * Returns if a client is timing out
faluco@682
   531
 *
faluco@682
   532
 * @param client		Player's index.
faluco@682
   533
 * @return				True if client is timing out, false otherwise.
faluco@682
   534
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   535
 */
dvander@691
   536
native bool:IsClientTimingOut(client);
faluco@682
   537
faluco@682
   538
/**
faluco@682
   539
 * Returns the client's connection time in seconds.
faluco@682
   540
 *
faluco@682
   541
 * @param client		Player's index.
faluco@682
   542
 * @return				Connection time.
faluco@682
   543
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   544
 */
dvander@691
   545
native Float:GetClientTime(client);
faluco@682
   546
faluco@682
   547
/**
faluco@682
   548
 * Returns the client's current latency (RTT), more accurate than GetAvgLatency but jittering.
faluco@682
   549
 *
faluco@682
   550
 * @param client		Player's index.
faluco@682
   551
 * @param flow			Traffic flowing direction.
faluco@682
   552
 * @return				Latency.
faluco@682
   553
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   554
 */
dvander@691
   555
native Float:GetClientLatency(client, NetFlow:flow);
faluco@682
   556
faluco@682
   557
/**
faluco@682
   558
 * Returns the client's average packet latency in seconds.
faluco@682
   559
 *
faluco@682
   560
 * @param client		Player's index.
faluco@682
   561
 * @param flow			Traffic flowing direction.
faluco@682
   562
 * @return				Average latency.
faluco@682
   563
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   564
 */
dvander@691
   565
native Float:GetClientAvgLatency(client, NetFlow:flow);
faluco@682
   566
faluco@682
   567
/**
faluco@682
   568
 * Returns the client's average packet loss, values go from 0 to 1 (for percentages).
faluco@682
   569
 *
faluco@682
   570
 * @param client		Player's index.
faluco@682
   571
 * @param flow			Traffic flowing direction.
faluco@682
   572
 * @return				Average packet loss.
faluco@682
   573
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   574
 */
dvander@691
   575
native Float:GetClientAvgLoss(client, NetFlow:flow);
faluco@682
   576
faluco@682
   577
/**
faluco@682
   578
 * Returns the client's average packet choke, values go from 0 to 1 (for percentages).
faluco@682
   579
 *
faluco@682
   580
 * @param client		Player's index.
faluco@682
   581
 * @param flow			Traffic flowing direction.
faluco@682
   582
 * @return				Average packet choke.
faluco@682
   583
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   584
 */
dvander@691
   585
native Float:GetClientAvgChoke(client, NetFlow:flow);
faluco@682
   586
faluco@682
   587
/**
faluco@682
   588
 * Returns the client's data flow in bytes/sec.
faluco@682
   589
 *
faluco@682
   590
 * @param client		Player's index.
faluco@682
   591
 * @param flow			Traffic flowing direction.
faluco@682
   592
 * @return				Data flow.
faluco@682
   593
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   594
 */
dvander@691
   595
native Float:GetClientAvgData(client, NetFlow:flow);
faluco@682
   596
faluco@682
   597
/**
faluco@682
   598
 * Returns the client's average packet frequency in packets/sec.
faluco@682
   599
 *
faluco@682
   600
 * @param client		Player's index.
faluco@682
   601
 * @param flow			Traffic flowing direction.
faluco@682
   602
 * @return				Packet frequency.
faluco@682
   603
 * @error				Invalid client index, client not in game, or fake client.
faluco@682
   604
 */
dvander@691
   605
native Float:GetClientAvgPackets(client, NetFlow:flow);
faluco@682
   606
faluco@682
   607
/**
faluco@682
   608
 * Translates an userid index to the real player index.
faluco@682
   609
 *
faluco@682
   610
 * @param userid		Userid value.
faluco@682
   611
 * @return				Client value.
faluco@682
   612
 * @error				Returns 0 if invalid userid.
faluco@682
   613
 */
faluco@682
   614
native GetClientOfUserId(userid);
ds@992
   615
ds@992
   616
/**
dvander@1346
   617
 * Disconnects a client from the server.  
dvander@1346
   618
 *
dvander@1346
   619
 * Kicking clients from certain events or callbacks may cause crashes.  If in 
dvander@1346
   620
 * doubt, create a short (0.1 second) timer to kick the client in the next 
dvander@1346
   621
 * available frame.
ds@992
   622
 *
ds@992
   623
 * @param client		Client index.
ds@992
   624
 * @param format		Optional formatting rules for disconnect reason.
ds@992
   625
 *                      Note that a period is automatically appended to the string by the engine.
ds@992
   626
 * @param ...			Variable number of format parameters.
ds@992
   627
 * @noreturn
ds@992
   628
 * @error				Invalid client index, or client not connected.
ds@992
   629
 */
ds@996
   630
native KickClient(client, const String:format[]="", any:...);
dvander@1033
   631
dvander@1033
   632
/**
dvander@1033
   633
 * Changes a client's team through the mod's generic team changing function.
dvander@1033
   634
 * On CS:S, this will kill the player.
dvander@1033
   635
 *
dvander@1033
   636
 * @param client		Client index.
dvander@1033
   637
 * @param team			Mod-specific team index.
dvander@1033
   638
 * @noreturn
dvander@1033
   639
 * @error				Invalid client index, client not connected, or lack of 
dvander@1033
   640
 *						mod support.
dvander@1033
   641
 */
dvander@1033
   642
native ChangeClientTeam(client, team);
dvander@1423
   643