dvander@429: /** ds@475: * vim: set ts=4 : dvander@429: * =============================================================== dvander@429: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@429: * =============================================================== dvander@429: * dvander@429: * This file is part of the SourceMod/SourcePawn SDK. This file may only be used dvander@429: * or modified under the Terms and Conditions of its License Agreement, which is found dvander@429: * in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins dvander@429: * may change at any time. To view the latest information, see: dvander@429: * http://www.sourcemod.net/license.php dvander@429: * dvander@429: * Version: $Id: sourcemod.inc 432 2007-02-02 22:47:14Z damagedsoul $ dvander@429: */ dvander@429: dvander@429: #if defined _sourcemod_included dvander@429: #endinput dvander@429: #endif dvander@429: #define _sourcemod_included dvander@429: dvander@429: struct Plugin dvander@429: { dvander@429: const String:name[], /* Plugin Name */ ds@475: const String:description[], /* Plugin Description */ dvander@429: const String:author[], /* Plugin Author */ dvander@429: const String:version[], /* Plugin Version */ dvander@429: const String:url[], /* Plugin URL */ dvander@429: }; dvander@429: dvander@429: #include dvander@429: #include dvander@429: #include dvander@429: #include dvander@429: #include dvander@429: #include ds@457: #include faluco@505: #include faluco@505: #include dvander@429: dvander@429: /** dvander@429: * Declare this as a struct in your plugin to expose its information. dvander@429: * Example: dvander@429: * dvander@429: * public Plugin:myinfo = dvander@429: * { dvander@429: * name = "My Plugin", dvander@429: * //etc dvander@429: * }; dvander@429: */ dvander@429: public Plugin:myinfo; dvander@429: dvander@429: /** dvander@429: * Called when the plugin is fully initialized and all known external references are resolved. dvander@429: * This is called even if the plugin type is "private." dvander@429: * NOTE: Errors in this function will cause the plugin to stop running. dvander@429: * dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnPluginStart(Handle:myself); dvander@429: dvander@429: /** dvander@429: * Called before OnPluginStart, in case the plugin wants to check for load failure. dvander@429: * This is called even if the plugin type is "private." Any natives from modules are dvander@429: * not available at this point. Thus, this forward should only be used for explicit dvander@429: * pre-emptive things, such as adding dynamic natives, or setting certain types of load filters. dvander@429: * dvander@429: * NOTE: It is not safe to call externally resolved natives until OnPluginStart(). dvander@429: * NOTE: Any sort of RTE in this function will cause the plugin to fail loading. dvander@429: * dvander@429: * @param myself Handle to the plugin. dvander@429: * @param late Whether or not the plugin was loaded "late" (after map load). dvander@429: * @param error Error message buffer in case load failed. dvander@429: * @param err_max Maximum number of characters for error message buffer. dvander@429: * @return True if load success, false otherwise. dvander@429: */ dvander@429: forward bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max); dvander@429: dvander@429: /** dvander@429: * Called when the plugin is about to be unloaded. dvander@429: * dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnPluginEnd(); dvander@429: dvander@429: /** dvander@429: * Called when the plugin's pause status is changing. dvander@429: * ds@475: * @param pause True if the plugin is being paused, false otherwise. dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnPluginPauseChange(bool:pause); dvander@429: dvander@429: /** dvander@429: * Called on client connection. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @param rejectmsg Buffer to store the rejection message when the connection is refused. dvander@429: * @param maxlen Maximum number of characters for rejection buffer. dvander@429: * @return True to validate client's connection, false to refuse it. dvander@429: */ dvander@429: forward bool:OnClientConnect(client, String:rejectmsg[], maxlen); dvander@429: dvander@429: /** dvander@429: * Called when a client is entering to the game. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnClientPutInServer(client); dvander@429: dvander@429: /** dvander@429: * Called when a client is disconnecting from the server. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnClientDisconnect(client); dvander@429: dvander@429: /** dvander@429: * Called when a client is disconnected from the server. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnClientDisconnect_Post(client); dvander@429: dvander@429: /** dvander@429: * Called when a client is sending a command. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @noreturn dvander@429: */ dvander@500: forward OnClientCommand(client, argCount); dvander@429: dvander@429: /** dvander@429: * Called whenever the client's settings are changed. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @noreturn dvander@429: */ dvander@429: forward OnClientSettingsChanged(client); dvander@429: dvander@429: /** dvander@448: * Called when a client receives a Steam ID. dvander@448: * @note This is called by bots, but the ID will be "BOT" dvander@448: * dvander@448: * @param client Player index. dvander@448: * @param auth Player auth string. dvander@448: */ dvander@448: forward OnClientAuthorized(client, const String:auth[]); dvander@448: dvander@448: /** dvander@429: * Returns the maximum number of clients allowed on the server. dvander@429: * dvander@429: * @return Maximum number of clients allowed. dvander@429: */ dvander@429: native GetMaxClients(); dvander@429: dvander@429: /** dvander@429: * Returns the client count put in the server. dvander@429: * dvander@429: * @param inGameOnly If false connecting players are also counted. dvander@429: * @return Client count in the server. dvander@429: */ dvander@429: native GetClientCount(bool:inGameOnly=true); dvander@429: dvander@429: /** dvander@429: * Returns the client's name. dvander@429: * ds@475: * @param client Player index. ds@475: * @param name Buffer to store the client's name. ds@475: * @param maxlen Maximum length of string buffer (includes NULL terminator). ds@475: * @return True on success, false otherwise. ds@475: * @error If the client is not connected an error will be thrown. dvander@429: */ dvander@429: native bool:GetClientName(client, String:name[], maxlen); dvander@429: dvander@429: /** dvander@429: * Retrieves a client's IP address. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @param name Buffer to store the client's ip address. dvander@429: * @param maxlen Maximum length of string buffer (includes NULL terminator). dvander@429: * @param remport Remove client's port from the ip string (true by default). dvander@460: * @return True on success, false otherwise. dvander@460: * @error If the client is not connected or the index is invalid. dvander@429: */ dvander@429: native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true); dvander@429: dvander@429: /** dvander@429: * Retrieves a client's authentication string (SteamID). dvander@429: * dvander@429: * @param client Player index. dvander@429: * @param auth Buffer to store the client's auth string. dvander@429: * @param maxlen Maximum length of string buffer (includes NULL terminator). dvander@460: * @return True on success, false otherwise. dvander@460: * @error If the client is not connected or the index is invalid. dvander@429: */ dvander@429: native bool:GetClientAuthString(client, String:auth[], maxlen); dvander@429: dvander@429: /** dvander@460: * Retrieves a client's user id, which is an index incremented for every client dvander@460: * that joins the server. dvander@460: * dvander@460: * @param client Player index. dvander@460: * @return User id of the client. dvander@460: * @error If the client is not connected or the index is invalid. dvander@460: */ dvander@460: native GetClientUserId(client); dvander@460: dvander@460: /** dvander@429: * Returns if a certain player is connected. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @return True if player is connected to the server, false otherwise. dvander@429: */ dvander@492: native bool:IsClientConnected(client); dvander@429: dvander@429: /** dvander@429: * Returns if a certain player has entered the game. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @return True if player has entered the game, false otherwise. dvander@429: */ dvander@429: native bool:IsPlayerInGame(client); dvander@429: dvander@429: /** dvander@429: * Returns if a certain player has been authenticated. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @return True if player has been authenticated, false otherwise. dvander@429: */ dvander@492: native bool:IsClientAuthorized(client); dvander@429: dvander@429: /** dvander@429: * Returns if a certain player is a fake client. dvander@429: * dvander@429: * @param client Player index. dvander@429: * @return True if player is a fake client, false otherwise. dvander@429: */ dvander@492: native bool:IsFakeClient(client); dvander@429: dvander@429: /** dvander@456: * Retrieves values from client replicated keys. dvander@456: * dvander@456: * @param client Player's index. dvander@456: * @param key Key string. dvander@456: * @param value Buffer to store value. dvander@456: * @param maxlen Maximum length of valve (UTF-8 safe). dvander@456: * @return True on success, false otherwise. dvander@458: * @error Invalid client index, or client not connected. dvander@456: */ dvander@456: native bool:GetClientInfo(client, const String:key[], String:value[], maxlen); dvander@456: dvander@456: /** dvander@458: * Sets a client's AdminId. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @param id AdminId to set. INVALID_ADMIN_ID removes admin permissions. dvander@458: * @param temp True if the id should be freed on disconnect. dvander@458: * @noreturn dvander@458: * @error Invalid client index, client not connected, or bogus AdminId. dvander@458: */ dvander@458: native SetUserAdmin(client, AdminId:id, bool:temp=false); dvander@458: dvander@458: /** dvander@458: * Retrieves a client's AdminId. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @return AdminId of the client, or INVALID_ADMIN_ID if none. dvander@458: * @error Invalid client index, or client not connected. dvander@458: */ dvander@458: native AdminId:GetUserAdmin(client); dvander@458: dvander@458: /** dvander@458: * Sets access flags on a client. If the client is not an admin, dvander@458: * a temporary, anonymous AdminId is given. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @param ... Flags to set on the client. dvander@458: * @noreturn dvander@458: * @error Invalid client index, or client not connected. dvander@458: */ dvander@458: native AddUserFlags(client, {AdminFlag}:...); dvander@458: dvander@458: /** dvander@458: * Removes flags from a client. If the client is not an admin, dvander@458: * this has no effect. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @param ... Flags to remove from the client. dvander@458: * @noreturn dvander@458: * @error Invalid client index, or client not connected. dvander@458: */ dvander@458: native RemoveUserFlags(client, {AdminFlag}:...); dvander@458: dvander@458: /** dvander@458: * Sets access flags on a client using bits instead of flags. If the dvander@458: * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @param flags Bitstring of flags to set on client. dvander@458: * @noreturn dvander@458: */ dvander@458: native SetUserFlagBits(client, flags); dvander@458: dvander@458: /** dvander@458: * Returns client access flags. If the client is not an admin, dvander@458: * the result is always 0. dvander@458: * dvander@458: * @param client Player's index. dvander@458: * @return Flags dvander@458: * @error Invalid client index, or client not connected. dvander@458: */ dvander@458: native GetUserFlagBits(client); dvander@458: dvander@458: /** dvander@429: * Logs a generic message to the HL2 logs. dvander@429: * ds@475: * @param format String format. ds@475: * @param ... Format arguments. dvander@429: * @noreturn dvander@429: */ dvander@429: native LogToGame(const String:format[], {Handle,Float,String,_}:...); dvander@429: dvander@429: /** dvander@429: * Logs a plugin message to the SourceMod logs. dvander@429: * ds@475: * @param format String format. ds@475: * @param ... Format arguments. dvander@429: * @noreturn dvander@429: */ dvander@429: native LogMessage(const String:format[], {Handle,Float,String,_}:...); dvander@429: dvander@429: /** dvander@429: * Logs a plugin error message to the SourceMod logs. dvander@429: * ds@475: * @param format String format. ds@475: * @param ... Format arguments. dvander@429: * @noreturn dvander@429: */ dvander@460: native LogError(const String:format[], {Handle,Float,String,_}:...); dvander@460: dvander@460: #include