plugins/include/sourcemod.inc
author David Anderson <dvander@alliedmods.net>
Mon Feb 26 08:32:20 2007 +0000 (2007-02-26)
changeset 536 164f7d3482ef
parent 535 f255342d132f
child 540 27a380082863
permissions -rw-r--r--
removed Handle:myself from OnPluginStart
added GetMyHandle to get handle now, but there's no use...
dvander@429
     1
/**
ds@475
     2
 * vim: set ts=4 :
dvander@429
     3
 * ===============================================================
dvander@429
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@429
     5
 * ===============================================================
dvander@429
     6
 *
dvander@429
     7
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be used 
dvander@429
     8
 * or modified under the Terms and Conditions of its License Agreement, which is found 
dvander@429
     9
 * in LICENSE.txt.  The Terms and Conditions for making SourceMod extensions/plugins 
dvander@429
    10
 * may change at any time.  To view the latest information, see:
dvander@429
    11
 *   http://www.sourcemod.net/license.php
dvander@429
    12
 *
faluco@506
    13
 * Version: $Id$
dvander@429
    14
 */
dvander@429
    15
dvander@429
    16
#if defined _sourcemod_included
dvander@429
    17
 #endinput
dvander@429
    18
#endif
dvander@429
    19
#define _sourcemod_included
dvander@429
    20
dvander@429
    21
struct Plugin
dvander@429
    22
{
dvander@429
    23
   const String:name[],			/* Plugin Name */
ds@475
    24
   const String:description[],	/* Plugin Description */
dvander@429
    25
   const String:author[],		/* Plugin Author */
dvander@429
    26
   const String:version[],		/* Plugin Version */
dvander@429
    27
   const String:url[],			/* Plugin URL */
dvander@429
    28
};
dvander@429
    29
dvander@429
    30
#include <core>
dvander@429
    31
#include <float>
dvander@429
    32
#include <handles>
dvander@429
    33
#include <string>
dvander@429
    34
#include <admin>
dvander@429
    35
#include <files>
ds@457
    36
#include <console>
faluco@505
    37
#include <bitbuffer>
dvander@535
    38
#include <sorting>
dvander@429
    39
dvander@429
    40
/**
dvander@429
    41
 * Declare this as a struct in your plugin to expose its information.
dvander@429
    42
 * Example:
dvander@429
    43
 *
dvander@429
    44
 * public Plugin:myinfo =
dvander@429
    45
 * {
dvander@429
    46
 *    name = "My Plugin",
dvander@429
    47
 *    //etc
dvander@429
    48
 * };
dvander@429
    49
 */
dvander@429
    50
public Plugin:myinfo;
dvander@429
    51
 
dvander@429
    52
/**
dvander@429
    53
 * Called when the plugin is fully initialized and all known external references are resolved.
dvander@429
    54
 * This is called even if the plugin type is "private."
dvander@429
    55
 * NOTE: Errors in this function will cause the plugin to stop running.
dvander@429
    56
 *
dvander@429
    57
 * @noreturn
dvander@429
    58
 */
dvander@536
    59
forward OnPluginStart();
dvander@429
    60
 
dvander@429
    61
/**
dvander@429
    62
 *   Called before OnPluginStart, in case the plugin wants to check for load failure.
dvander@429
    63
 * This is called even if the plugin type is "private."  Any natives from modules are 
dvander@429
    64
 * not available at this point.  Thus, this forward should only be used for explicit 
dvander@429
    65
 * pre-emptive things, such as adding dynamic natives, or setting certain types of load filters.
dvander@429
    66
 * 
dvander@429
    67
 * NOTE: It is not safe to call externally resolved natives until OnPluginStart().
dvander@429
    68
 * NOTE: Any sort of RTE in this function will cause the plugin to fail loading.
dvander@429
    69
 *
dvander@429
    70
 * @param myself	Handle to the plugin.
dvander@429
    71
 * @param late		Whether or not the plugin was loaded "late" (after map load).
dvander@429
    72
 * @param error		Error message buffer in case load failed.
dvander@429
    73
 * @param err_max	Maximum number of characters for error message buffer.
dvander@429
    74
 * @return			True if load success, false otherwise.
dvander@429
    75
 */
dvander@429
    76
forward bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max);
dvander@429
    77
dvander@429
    78
/**
dvander@429
    79
 * Called when the plugin is about to be unloaded.
dvander@429
    80
 *
dvander@429
    81
 * @noreturn
dvander@429
    82
 */
dvander@429
    83
forward OnPluginEnd();
dvander@429
    84
dvander@429
    85
/**
dvander@429
    86
 * Called when the plugin's pause status is changing.
dvander@429
    87
 *
ds@475
    88
 * @param pause			True if the plugin is being paused, false otherwise.
dvander@429
    89
 * @noreturn
dvander@429
    90
 */
dvander@429
    91
forward OnPluginPauseChange(bool:pause);
dvander@429
    92
dvander@429
    93
/**
dvander@429
    94
 * Called on client connection.
dvander@429
    95
 *
dvander@429
    96
 * @param client		Player index.
dvander@429
    97
 * @param rejectmsg		Buffer to store the rejection message when the connection is refused.
dvander@429
    98
 * @param maxlen		Maximum number of characters for rejection buffer.
dvander@429
    99
 * @return				True to validate client's connection, false to refuse it.
dvander@429
   100
 */
dvander@429
   101
forward bool:OnClientConnect(client, String:rejectmsg[], maxlen);
dvander@429
   102
dvander@429
   103
/**
dvander@429
   104
 * Called when a client is entering to the game.
dvander@429
   105
 *
dvander@429
   106
 * @param client		Player index.
dvander@429
   107
 * @noreturn
dvander@429
   108
 */
dvander@429
   109
forward OnClientPutInServer(client);
dvander@429
   110
dvander@429
   111
/**
dvander@429
   112
 * Called when a client is disconnecting from the server.
dvander@429
   113
 *
dvander@429
   114
 * @param client		Player index.
dvander@429
   115
 * @noreturn
dvander@429
   116
 */
dvander@429
   117
forward OnClientDisconnect(client);
dvander@429
   118
dvander@429
   119
/**
dvander@429
   120
 * Called when a client is disconnected from the server.
dvander@429
   121
 *
dvander@429
   122
 * @param client		Player index.
dvander@429
   123
 * @noreturn
dvander@429
   124
 */
dvander@429
   125
forward OnClientDisconnect_Post(client);
dvander@429
   126
dvander@429
   127
/**
dvander@429
   128
 * Called when a client is sending a command.
dvander@429
   129
 *
dvander@429
   130
 * @param client		Player index.
dvander@429
   131
 * @noreturn
dvander@429
   132
 */
dvander@500
   133
forward OnClientCommand(client, argCount);
dvander@429
   134
dvander@429
   135
/**
dvander@429
   136
 * Called whenever the client's settings are changed.
dvander@429
   137
 *
dvander@429
   138
 * @param client		Player index.
dvander@429
   139
 * @noreturn
dvander@429
   140
 */
dvander@429
   141
forward OnClientSettingsChanged(client);
dvander@429
   142
dvander@429
   143
/**
dvander@448
   144
 * Called when a client receives a Steam ID.
dvander@448
   145
 * @note This is called by bots, but the ID will be "BOT"
dvander@448
   146
 *
dvander@448
   147
 * @param client		Player index.
dvander@448
   148
 * @param auth			Player auth string.
dvander@448
   149
 */
dvander@448
   150
forward OnClientAuthorized(client, const String:auth[]);
dvander@448
   151
dvander@448
   152
/**
dvander@531
   153
 * Called before every server frame.  Note that you should avoid
dvander@531
   154
 * doing expensive computations here, and you should declare large
dvander@531
   155
 * local arrays using 'decl' instead of 'new'.
dvander@531
   156
 */
dvander@531
   157
forward OnGameFrame();
dvander@531
   158
dvander@531
   159
/**
dvander@536
   160
 * Returns the calling plugin's Handle.
dvander@536
   161
 *
dvander@536
   162
 * @return				Handle of the calling plugin.
dvander@536
   163
 */
dvander@536
   164
native Handle:GetMyHandle();
dvander@536
   165
dvander@536
   166
/**
dvander@429
   167
 * Returns the maximum number of clients allowed on the server.
dvander@429
   168
 *
dvander@429
   169
 * @return				Maximum number of clients allowed.
dvander@429
   170
 */
dvander@429
   171
native GetMaxClients();
dvander@429
   172
dvander@429
   173
/**
dvander@429
   174
 * Returns the client count put in the server.
dvander@429
   175
 *
dvander@429
   176
 * @param inGameOnly	If false connecting players are also counted.
dvander@429
   177
 * @return				Client count in the server.
dvander@429
   178
 */
dvander@429
   179
native GetClientCount(bool:inGameOnly=true);
dvander@429
   180
dvander@429
   181
/**
dvander@429
   182
 * Returns the client's name.
dvander@429
   183
 *
ds@475
   184
 * @param client		Player index.
ds@475
   185
 * @param name			Buffer to store the client's name.
ds@475
   186
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
ds@475
   187
 * @return				True on success, false otherwise.
ds@475
   188
 * @error				If the client is not connected an error will be thrown.
dvander@429
   189
 */
dvander@429
   190
native bool:GetClientName(client, String:name[], maxlen);
dvander@429
   191
dvander@429
   192
/**
dvander@429
   193
 * Retrieves a client's IP address.
dvander@429
   194
 *
dvander@429
   195
 * @param client		Player index.
dvander@429
   196
 * @param name			Buffer to store the client's ip address.
dvander@429
   197
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@429
   198
 * @param remport		Remove client's port from the ip string (true by default).
dvander@460
   199
 * @return				True on success, false otherwise.
dvander@460
   200
 * @error				If the client is not connected or the index is invalid.
dvander@429
   201
 */
dvander@429
   202
native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true);
dvander@429
   203
dvander@429
   204
/**
dvander@429
   205
 * Retrieves a client's authentication string (SteamID).
dvander@429
   206
 *
dvander@429
   207
 * @param client		Player index.
dvander@429
   208
 * @param auth			Buffer to store the client's auth string.
dvander@429
   209
 * @param maxlen		Maximum length of string buffer (includes NULL terminator).
dvander@460
   210
 * @return				True on success, false otherwise.
dvander@460
   211
 * @error				If the client is not connected or the index is invalid.
dvander@429
   212
 */
dvander@429
   213
native bool:GetClientAuthString(client, String:auth[], maxlen);
dvander@429
   214
dvander@429
   215
/**
dvander@460
   216
 * Retrieves a client's user id, which is an index incremented for every client
dvander@460
   217
 * that joins the server.
dvander@460
   218
 *
dvander@460
   219
 * @param client		Player index.
dvander@460
   220
 * @return				User id of the client.
dvander@460
   221
 * @error 				If the client is not connected or the index is invalid.
dvander@460
   222
 */
dvander@460
   223
native GetClientUserId(client);
dvander@460
   224
dvander@460
   225
/**
dvander@429
   226
 * Returns if a certain player is connected.
dvander@429
   227
 *
dvander@429
   228
 * @param client		Player index.
dvander@429
   229
 * @return				True if player is connected to the server, false otherwise.
dvander@429
   230
 */
dvander@492
   231
native bool:IsClientConnected(client);
dvander@429
   232
dvander@429
   233
/**
dvander@429
   234
 * Returns if a certain player has entered the game.
dvander@429
   235
 *
dvander@429
   236
 * @param client		Player index.
dvander@429
   237
 * @return				True if player has entered the game, false otherwise.
dvander@429
   238
 */
dvander@429
   239
native bool:IsPlayerInGame(client);
dvander@429
   240
dvander@429
   241
/**
dvander@429
   242
 * Returns if a certain player has been authenticated.
dvander@429
   243
 *
dvander@429
   244
 * @param client		Player index.
dvander@429
   245
 * @return				True if player has been authenticated, false otherwise.
dvander@429
   246
 */
dvander@492
   247
native bool:IsClientAuthorized(client);
dvander@429
   248
dvander@429
   249
/**
dvander@429
   250
 * Returns if a certain player is a fake client.
dvander@429
   251
 *
dvander@429
   252
 * @param client		Player index.
dvander@429
   253
 * @return				True if player is a fake client, false otherwise.
dvander@429
   254
 */
dvander@492
   255
native bool:IsFakeClient(client);
dvander@429
   256
dvander@429
   257
/**
dvander@456
   258
 * Retrieves values from client replicated keys.
dvander@456
   259
 *
dvander@456
   260
 * @param client		Player's index.
dvander@456
   261
 * @param key			Key string.
dvander@456
   262
 * @param value			Buffer to store value.
dvander@456
   263
 * @param maxlen		Maximum length of valve (UTF-8 safe).
dvander@456
   264
 * @return 				True on success, false otherwise.
dvander@458
   265
 * @error				Invalid client index, or client not connected.
dvander@456
   266
 */
dvander@456
   267
native bool:GetClientInfo(client, const String:key[], String:value[], maxlen);
dvander@456
   268
dvander@456
   269
/**
dvander@458
   270
 * Sets a client's AdminId.  
dvander@458
   271
 *
dvander@458
   272
 * @param client		Player's index.
dvander@458
   273
 * @param id			AdminId to set.  INVALID_ADMIN_ID removes admin permissions.
dvander@458
   274
 * @param temp			True if the id should be freed on disconnect.
dvander@458
   275
 * @noreturn
dvander@458
   276
 * @error				Invalid client index, client not connected, or bogus AdminId.
dvander@458
   277
 */
dvander@458
   278
native SetUserAdmin(client, AdminId:id, bool:temp=false);
dvander@458
   279
dvander@458
   280
/**
dvander@458
   281
 * Retrieves a client's AdminId.
dvander@458
   282
 *
dvander@458
   283
 * @param client		Player's index.
dvander@458
   284
 * @return				AdminId of the client, or INVALID_ADMIN_ID if none.
dvander@458
   285
 * @error				Invalid client index, or client not connected.
dvander@458
   286
 */
dvander@458
   287
native AdminId:GetUserAdmin(client);
dvander@458
   288
dvander@458
   289
/**
dvander@458
   290
 * Sets access flags on a client.  If the client is not an admin,
dvander@458
   291
 * a temporary, anonymous AdminId is given.
dvander@458
   292
 *
dvander@458
   293
 * @param client		Player's index.
dvander@458
   294
 * @param ...			Flags to set on the client.
dvander@458
   295
 * @noreturn
dvander@458
   296
 * @error				Invalid client index, or client not connected.
dvander@458
   297
 */
dvander@458
   298
native AddUserFlags(client, {AdminFlag}:...);
dvander@458
   299
dvander@458
   300
/**
dvander@458
   301
 * Removes flags from a client.  If the client is not an admin,
dvander@458
   302
 * this has no effect.
dvander@458
   303
 *
dvander@458
   304
 * @param client		Player's index.
dvander@458
   305
 * @param ...			Flags to remove from the client.
dvander@458
   306
 * @noreturn
dvander@458
   307
 * @error				Invalid client index, or client not connected.
dvander@458
   308
 */
dvander@458
   309
native RemoveUserFlags(client, {AdminFlag}:...);
dvander@458
   310
dvander@458
   311
/** 
dvander@458
   312
 * Sets access flags on a client using bits instead of flags.  If the
dvander@458
   313
 * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given.
dvander@458
   314
 *
dvander@458
   315
 * @param client		Player's index.
dvander@458
   316
 * @param flags			Bitstring of flags to set on client.
dvander@458
   317
 * @noreturn
dvander@458
   318
 */
dvander@458
   319
native SetUserFlagBits(client, flags);
dvander@458
   320
dvander@458
   321
/**
dvander@458
   322
 * Returns client access flags.  If the client is not an admin,
dvander@458
   323
 * the result is always 0.
dvander@458
   324
 * 
dvander@458
   325
 * @param client		Player's index.
dvander@458
   326
 * @return				Flags
dvander@458
   327
 * @error				Invalid client index, or client not connected.
dvander@458
   328
 */
dvander@458
   329
native GetUserFlagBits(client);
dvander@458
   330
dvander@458
   331
/**
dvander@429
   332
 * Logs a generic message to the HL2 logs.
dvander@429
   333
 *
ds@475
   334
 * @param format		String format.
ds@475
   335
 * @param ...			Format arguments.
dvander@429
   336
 * @noreturn
dvander@429
   337
 */
dvander@429
   338
native LogToGame(const String:format[], {Handle,Float,String,_}:...);
dvander@429
   339
dvander@429
   340
/**
dvander@429
   341
 * Logs a plugin message to the SourceMod logs.
dvander@429
   342
 *
ds@475
   343
 * @param format		String format.
ds@475
   344
 * @param ...			Format arguments.
dvander@429
   345
 * @noreturn
dvander@429
   346
 */
dvander@429
   347
native LogMessage(const String:format[], {Handle,Float,String,_}:...);
dvander@429
   348
dvander@429
   349
/**
dvander@429
   350
 * Logs a plugin error message to the SourceMod logs.
dvander@429
   351
 *
ds@475
   352
 * @param format		String format.
ds@475
   353
 * @param ...			Format arguments.
dvander@429
   354
 * @noreturn
dvander@429
   355
 */
dvander@460
   356
native LogError(const String:format[], {Handle,Float,String,_}:...);
dvander@460
   357
dvander@530
   358
/**
dvander@530
   359
 * Sets the seed value for the global Half-Life 2 Random Stream
dvander@530
   360
 *
dvander@530
   361
 * @param seed			Seed value.
dvander@530
   362
 * @noreturn	
dvander@530
   363
 */
dvander@530
   364
native SetRandomSeed(seed);
dvander@530
   365
dvander@530
   366
/**
dvander@530
   367
 * Returns a random floating point number from the Half-Life 2 Random Stream
dvander@530
   368
 *
dvander@530
   369
 * @param fMin			Minimum random bound.
dvander@530
   370
 * @param fMax			Maximum random bound.
dvander@530
   371
 * @return				A random number between (inclusive) fMin and fMax.
dvander@530
   372
 */
dvander@530
   373
native Float:GetRandomFloat(Float:fMin=0.0, Float:fMax=1.0);
dvander@530
   374
dvander@530
   375
/**
dvander@530
   376
 * Returns a random number from the Half-Life 2 Random Stream
dvander@530
   377
 *
dvander@530
   378
 * @param nmin			Minimum random bound.
dvander@530
   379
 * @param nmax			Maximum random bound.
dvander@530
   380
 * @return				A random number between (inclusive) nmin and nmax.
dvander@530
   381
 */
dvander@530
   382
native GetRandomInt(nmin, nmax);
dvander@530
   383
dvander@532
   384
/**
dvander@532
   385
 * Returns whether a map is valid or not.
dvander@532
   386
 * 
dvander@532
   387
 * @param 				Map name, excluding .bsp extension.
dvander@532
   388
 * @return				True if valid, false otherwise.
dvander@532
   389
 */
dvander@532
   390
native bool:IsMapValid(const String:map[]);
dvander@532
   391
dvander@532
   392
/**
dvander@532
   393
 * Returns whether the server is dedicated.
dvander@532
   394
 *
dvander@532
   395
 * @return				True if dedicated, false otherwise.
dvander@532
   396
 */
dvander@532
   397
native bool:IsDedicatedServer();
dvander@532
   398
dvander@532
   399
/**
dvander@532
   400
 * Returns the number of entities in the server.
dvander@532
   401
 *
dvander@532
   402
 * @return				Number of entities in the server.
dvander@532
   403
 */
dvander@532
   404
native GetEntityCount();
dvander@532
   405
dvander@532
   406
/**
dvander@532
   407
 * Returns whether or not an entity is valid.
dvander@532
   408
 *
dvander@532
   409
 * @param entity		Index of the entity.
dvander@532
   410
 * @return				True if valid, false otherwise.
dvander@532
   411
 */
dvander@532
   412
native bool:IsValidEntity(entity);
dvander@532
   413
dvander@532
   414
/**
dvander@532
   415
 * Creates a new edict (the basis of a networkable entity)
dvander@532
   416
 *
dvander@532
   417
 * @return				Index of the entity, 0 on failure.
dvander@532
   418
 */
dvander@532
   419
native CreateEdict();
dvander@532
   420
dvander@532
   421
/** 
dvander@532
   422
 * Removes an edict from the world.
dvander@532
   423
 *
dvander@532
   424
 * @param entity		Index of the entity.
dvander@532
   425
 * @noreturn
dvander@532
   426
 * @error				Invalid entity index.
dvander@532
   427
 */
dvander@532
   428
native RemoveEntity(entity);
dvander@532
   429
dvander@532
   430
/**
dvander@532
   431
 * Returns a high-precision time value for profiling the engine.
dvander@532
   432
 *
dvander@532
   433
 * @return				A floating point time value.
dvander@532
   434
 */
dvander@532
   435
native Float:GetEngineTime();
dvander@532
   436
dvander@532
   437
/** 
dvander@532
   438
 * Returns the game time based on the game tick.
dvander@532
   439
 *
dvander@532
   440
 * @return				Game tick time.
dvander@532
   441
 */
dvander@532
   442
native Float:GetGameTime();
dvander@532
   443
dvander@532
   444
/** 
dvander@532
   445
 * Creates a fake client.
dvander@532
   446
 *
dvander@532
   447
 * @param name			Name to use.
dvander@532
   448
 * @return				Client index on success, 0 otherwise.
dvander@532
   449
 */
dvander@532
   450
native CreateFakeClient(const String:name[]);
dvander@532
   451
dvander@532
   452
/**
dvander@532
   453
 * Sets a convar value on a fake client.
dvander@532
   454
 *
dvander@532
   455
 * @param client		Client index.
dvander@532
   456
 * @param cvar			ConVar name.
dvander@532
   457
 * @param value			ConVar value.
dvander@532
   458
 * @noreturn
dvander@532
   459
 * @error				Invalid client index, client not connected,
dvander@532
   460
 *						or client not a fake client.
dvander@532
   461
 */
dvander@532
   462
native SetFakeClientConVar(client, const String:cvar[], const String:value[]);
dvander@532
   463
dvander@532
   464
/**
dvander@532
   465
 * Returns the game description from the mod.
dvander@532
   466
 *
dvander@532
   467
 * @param buffer		Buffer to store the description.
dvander@532
   468
 * @param maxlength		Maximum size of the buffer.
dvander@532
   469
 * @param original		If true, retrieves the original game description,
dvander@532
   470
 *						ignoring any potential hooks from plugins.
dvander@532
   471
 * @return				Number of bytes written to the buffer (UTF-8 safe).
dvander@532
   472
 */
dvander@532
   473
native GetGameDescription(String:buffer[], maxlength, bool:original=false);
dvander@532
   474
dvander@532
   475
/**
dvander@532
   476
 * Returns the maximum number of entities.
dvander@532
   477
 *
dvander@532
   478
 * @return				Maximum number of entities.
dvander@532
   479
 */
dvander@532
   480
native GetMaxEntities();
dvander@532
   481
dvander@532
   482
/**
dvander@532
   483
 * Returns the current map name.
dvander@532
   484
 *
dvander@532
   485
 * @param buffer		Buffer to store map name.
dvander@532
   486
 * @param maxlength		Maximum length of buffer.
dvander@532
   487
 * @return				Number of bytes written (UTF-8 safe).
dvander@532
   488
 */
dvander@532
   489
native GetCurrentMap(String:buffer[], maxlength);
dvander@530
   490
dvander@523
   491
#include <usermessages>
dvander@460
   492
#include <helpers>