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