dvander@435: /** dvander@435: * vim: set ts=4 : dvander@435: * =============================================================== dvander@435: * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. dvander@435: * All rights reserved. dvander@435: * =============================================================== dvander@435: * dvander@435: * This file is part of the SourceMod/SourcePawn SDK. This file may only be dvander@435: * used or modified under the Terms and Conditions of its License Agreement, dvander@435: * which is found in public/licenses/LICENSE.txt. As of this notice, derivative dvander@435: * works must be licensed under the GNU General Public License (version 2 or dvander@435: * greater). A copy of the GPL is included under public/licenses/GPL.txt. dvander@435: * dvander@435: * To view the latest information, see: http://www.sourcemod.net/license.php dvander@435: * dvander@435: * Version: $Id$ dvander@435: */ dvander@435: dvander@435: #ifndef _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_ dvander@435: #define _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_ dvander@435: dvander@1137: /** dvander@1137: * @file IPlayerHelpers.h dvander@1137: * @brief Defines basic helper functions for Half-Life 2 clients dvander@1137: */ dvander@1137: dvander@435: #include dvander@458: #include dvander@435: dvander@435: #define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager" dvander@435: #define SMINTERFACE_PLAYERMANAGER_VERSION 1 dvander@435: dvander@435: struct edict_t; dvander@435: dvander@435: namespace SourceMod dvander@435: { dvander@435: /** dvander@435: * @brief Abstracts some Half-Life 2 and SourceMod properties about clients. dvander@435: */ dvander@435: class IGamePlayer dvander@435: { dvander@435: public: dvander@435: /** dvander@435: * @brief Returns the player's name. dvander@435: * dvander@435: * @return String containing the player's name, dvander@435: * or NULL if unavailable. dvander@435: */ dvander@615: virtual const char *GetName() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns the player's IP address. dvander@435: * dvander@435: * @return String containing the player's IP address, dvander@435: * or NULL if unavailable. dvander@435: */ dvander@615: virtual const char *GetIPAddress() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns the player's authentication string. dvander@435: * dvander@435: * @return String containing the player's auth string. dvander@435: * May be NULL if unavailable. dvander@435: */ dvander@615: virtual const char *GetAuthString() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns the player's edict_t structure. dvander@435: * dvander@435: * @return edict_t pointer, or NULL if unavailable. dvander@435: */ dvander@615: virtual edict_t *GetEdict() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns whether the player is in game (putinserver). dvander@435: * dvander@435: * @return True if in game, false otherwise. dvander@435: */ dvander@615: virtual bool IsInGame() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns whether the player is connected. dvander@435: * dvander@435: * Note: If this returns true, all above functions except for dvander@435: * GetAuthString() should return non-NULL results. dvander@435: * dvander@435: * @return True if connected, false otherwise. dvander@435: */ dvander@615: virtual bool IsConnected() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns whether the player is a fake client. dvander@435: * dvander@435: * @return True if a fake client, false otherwise. dvander@435: */ dvander@615: virtual bool IsFakeClient() =0; dvander@458: dvander@458: /** dvander@458: * @brief Returns the client's AdminId, if any. dvander@458: * dvander@458: * @return AdminId, or INVALID_ADMIN_ID if none. dvander@458: */ dvander@615: virtual AdminId GetAdminId() =0; dvander@458: dvander@458: /** dvander@458: * @brief Sets the client's AdminId. dvander@458: * dvander@458: * @param id AdminId to set. dvander@458: * @param temp If true, the id will be invalidated on disconnect. dvander@458: */ dvander@458: virtual void SetAdminId(AdminId id, bool temp) =0; dvander@435: }; dvander@435: dvander@435: /** dvander@435: * @brief Provides callbacks for important client events. dvander@435: */ dvander@435: class IClientListener dvander@435: { dvander@435: public: faluco@620: /** faluco@620: * @brief Returns the current client listener version. faluco@620: * faluco@620: * @return Client listener version. faluco@620: */ dvander@541: virtual unsigned int GetClientListenerVersion() dvander@435: { dvander@435: return SMINTERFACE_PLAYERMANAGER_VERSION; dvander@435: } dvander@435: public: dvander@435: /** dvander@435: * @brief Called when a client requests connection. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: * @param error Error buffer for a disconnect reason. dvander@435: * @param maxlength Maximum length of error buffer. dvander@435: * @return True to allow client, false to reject. dvander@435: */ dvander@435: virtual bool InterceptClientConnect(int client, char *error, size_t maxlength) dvander@435: { dvander@435: return true; dvander@435: } dvander@435: dvander@435: /** dvander@435: * @brief Called when a client has connected. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: */ dvander@435: virtual void OnClientConnected(int client) dvander@435: { dvander@435: } dvander@435: dvander@435: /** dvander@435: * @brief Called when a client is put in server. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: */ dvander@435: virtual void OnClientPutInServer(int client) dvander@435: { dvander@435: } dvander@435: dvander@435: /** dvander@435: * @brief Called when a client is disconnecting (not fully disconnected yet). dvander@435: * dvander@435: * @param client Index of the client. dvander@435: */ dvander@435: virtual void OnClientDisconnecting(int client) dvander@435: { dvander@435: } dvander@435: dvander@435: /** dvander@435: * @brief Called when a client has fully disconnected. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: */ dvander@435: virtual void OnClientDisconnected(int client) dvander@435: { dvander@435: } dvander@435: dvander@435: /** ds@729: * @brief Called when a client has received authorization. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: * @param authstring Authorization string. dvander@435: */ dvander@435: virtual void OnClientAuthorized(int client, const char *authstring) dvander@435: { dvander@435: } dvander@435: }; dvander@435: dvander@435: class IPlayerManager : public SMInterface dvander@435: { dvander@435: public: dvander@435: const char *GetInterfaceName() dvander@435: { dvander@435: return SMINTERFACE_PLAYERMANAGER_NAME; dvander@435: } dvander@435: unsigned int GetInterfaceVersion() dvander@435: { dvander@435: return SMINTERFACE_PLAYERMANAGER_VERSION; dvander@435: } dvander@435: public: dvander@435: /** dvander@435: * @brief Adds a client listener. dvander@435: * dvander@435: * @param listener Pointer to an IClientListener. dvander@435: */ dvander@435: virtual void AddClientListener(IClientListener *listener) =0; dvander@435: dvander@435: /** dvander@435: * @brief Removes a client listener. dvander@435: * dvander@435: * @param listener Pointer to an IClientListener. dvander@435: */ dvander@435: virtual void RemoveClientListener(IClientListener *listener) =0; dvander@435: dvander@435: /** dvander@435: * @brief Retrieves an IGamePlayer object by its client index. dvander@435: * dvander@435: * Note: This will return a valid object for any player, connected or not. dvander@435: * Note: Client indexes start at 1, not 0. dvander@435: * dvander@435: * @param client Index of the client. dvander@435: * @return An IGamePlayer pointer, or NULL if out of range. dvander@435: */ dvander@435: virtual IGamePlayer *GetGamePlayer(int client) =0; dvander@435: dvander@435: /** dvander@435: * @brief Retrieves an IGamePlayer object by its edict_t pointer. dvander@435: * dvander@435: * @param pEdict Index of the client dvander@435: * @return An IGamePlayer pointer, or NULL if out of range. dvander@435: */ dvander@435: virtual IGamePlayer *GetGamePlayer(edict_t *pEdict) =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns the maximum number of clients. dvander@435: * dvander@435: * @return Maximum number of clients. dvander@435: */ dvander@435: virtual int GetMaxClients() =0; dvander@435: dvander@435: /** dvander@435: * @brief Returns the number of players currently connected. dvander@435: * dvander@435: * @return Current number of connected clients. dvander@435: */ dvander@435: virtual int GetNumPlayers() =0; faluco@682: faluco@682: /** faluco@682: * @brief Returns the client index by its userid. faluco@682: * faluco@682: * @param userid Userid of the client. faluco@682: * @return Client index, or 0 if invalid userid passed. faluco@682: */ faluco@682: virtual int GetClientOfUserId(int userid) =0; dvander@435: }; dvander@435: } dvander@435: dvander@435: #endif //_INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_