public/IPlayerHelpers.h
author David Anderson <dvander@alliedmods.net>
Fri Aug 10 05:59:03 2007 +0000 (2007-08-10)
changeset 1300 2c6b22445149
parent 1226 478550a4d5ec
child 1330 ab94316bb52b
permissions -rw-r--r--
fixed per-group command overrides not working
dvander@435
     1
/**
dvander@435
     2
 * vim: set ts=4 :
dvander@1226
     3
 * ================================================================
dvander@1226
     4
 * SourceMod
dvander@1226
     5
 * Copyright (C) 2004-2007 AlliedModders LLC.  All rights reserved.
dvander@1226
     6
 * ================================================================
dvander@435
     7
 *
dvander@1226
     8
 * This program is free software; you can redistribute it and/or 
dvander@1226
     9
 * modify it under the terms of the GNU General Public License, 
dvander@1226
    10
 * version 3.0, as published by the Free Software Foundation.
dvander@435
    11
 * 
dvander@1226
    12
 * This program is distributed in the hope that it will be useful,
dvander@1226
    13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dvander@1226
    14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dvander@1226
    15
 * GNU General Public License for more details.
dvander@1226
    16
 *
dvander@1226
    17
 * You should have received a copy of the GNU General Public License
dvander@1226
    18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@1226
    19
 *
dvander@1226
    20
 * As a special exception, AlliedModders LLC gives you permission to 
dvander@1226
    21
 * link the code of this program (as well as its derivative works) to 
dvander@1226
    22
 * "Half-Life 2," the "Source Engine," the "SourcePawn JIT," and any 
dvander@1226
    23
 * Game MODs that run on software by the Valve Corporation.  You must 
dvander@1226
    24
 * obey the GNU General Public License in all respects for all other 
dvander@1226
    25
 * code used. Additionally, AlliedModders LLC grants this exception 
dvander@1226
    26
 * to all derivative works. AlliedModders LLC defines further 
dvander@1226
    27
 * exceptions, found in LICENSE.txt (as of this writing, version 
dvander@1226
    28
 * JULY-31-2007), or <http://www.sourcemod.net/license.php>.
dvander@435
    29
 *
dvander@435
    30
 * Version: $Id$
dvander@435
    31
 */
dvander@435
    32
dvander@435
    33
#ifndef _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_
dvander@435
    34
#define _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_
dvander@435
    35
dvander@1137
    36
/**
dvander@1137
    37
 * @file IPlayerHelpers.h
dvander@1137
    38
 * @brief Defines basic helper functions for Half-Life 2 clients
dvander@1137
    39
 */
dvander@1137
    40
dvander@435
    41
#include <IShareSys.h>
dvander@458
    42
#include <IAdminSystem.h>
dvander@435
    43
dvander@435
    44
#define SMINTERFACE_PLAYERMANAGER_NAME		"IPlayerManager"
dvander@435
    45
#define SMINTERFACE_PLAYERMANAGER_VERSION	1
dvander@435
    46
dvander@435
    47
struct edict_t;
dvander@435
    48
dvander@435
    49
namespace SourceMod
dvander@435
    50
{
dvander@435
    51
	/**
dvander@435
    52
	 * @brief Abstracts some Half-Life 2 and SourceMod properties about clients.
dvander@435
    53
	 */
dvander@435
    54
	class IGamePlayer
dvander@435
    55
	{
dvander@435
    56
	public:
dvander@435
    57
		/**
dvander@435
    58
		 * @brief Returns the player's name.
dvander@435
    59
		 *
dvander@435
    60
		 * @return		String containing the player's name,
dvander@435
    61
		 *				or NULL if unavailable.
dvander@435
    62
		 */
dvander@615
    63
		virtual const char *GetName() =0;
dvander@435
    64
dvander@435
    65
		/**
dvander@435
    66
		 * @brief Returns the player's IP address.
dvander@435
    67
		 *
dvander@435
    68
		 * @return		String containing the player's IP address,
dvander@435
    69
		 *				or NULL if unavailable.
dvander@435
    70
		 */
dvander@615
    71
		virtual const char *GetIPAddress() =0;
dvander@435
    72
dvander@435
    73
		/**
dvander@435
    74
		 * @brief Returns the player's authentication string.
dvander@435
    75
		 *
dvander@435
    76
		 * @return		String containing the player's auth string.
dvander@435
    77
		 *				May be NULL if unavailable.
dvander@435
    78
		 */
dvander@615
    79
		virtual const char *GetAuthString() =0;
dvander@435
    80
dvander@435
    81
		/**
dvander@435
    82
		 * @brief Returns the player's edict_t structure.
dvander@435
    83
		 *
dvander@435
    84
		 * @return		edict_t pointer, or NULL if unavailable.
dvander@435
    85
		 */
dvander@615
    86
		virtual edict_t *GetEdict() =0;
dvander@435
    87
dvander@435
    88
		/**
dvander@435
    89
		 * @brief Returns whether the player is in game (putinserver).
dvander@435
    90
		 *
dvander@435
    91
		 * @return		True if in game, false otherwise.
dvander@435
    92
		 */
dvander@615
    93
		virtual bool IsInGame() =0;
dvander@435
    94
dvander@435
    95
		/**
dvander@435
    96
		 * @brief Returns whether the player is connected.
dvander@435
    97
		 *
dvander@435
    98
		 * Note: If this returns true, all above functions except for
dvander@435
    99
		 * GetAuthString() should return non-NULL results.
dvander@435
   100
		 *
dvander@435
   101
		 * @return		True if connected, false otherwise.
dvander@435
   102
		 */
dvander@615
   103
		virtual bool IsConnected() =0;
dvander@435
   104
dvander@435
   105
		/**
dvander@435
   106
		 * @brief Returns whether the player is a fake client.
dvander@435
   107
		 *
dvander@435
   108
		 * @return		True if a fake client, false otherwise.
dvander@435
   109
		 */
dvander@615
   110
		virtual bool IsFakeClient() =0;
dvander@458
   111
dvander@458
   112
		/**
dvander@458
   113
		 * @brief Returns the client's AdminId, if any.
dvander@458
   114
		 *
dvander@458
   115
		 * @return		AdminId, or INVALID_ADMIN_ID if none.
dvander@458
   116
		 */
dvander@615
   117
		virtual AdminId GetAdminId() =0;
dvander@458
   118
dvander@458
   119
		/**
dvander@458
   120
		 * @brief Sets the client's AdminId.
dvander@458
   121
		 *
dvander@458
   122
		 * @param id	AdminId to set.
dvander@458
   123
		 * @param temp	If true, the id will be invalidated on disconnect.
dvander@458
   124
		 */
dvander@458
   125
		virtual void SetAdminId(AdminId id, bool temp) =0;
dvander@435
   126
	};
dvander@435
   127
dvander@435
   128
	/**
dvander@435
   129
	 * @brief Provides callbacks for important client events.
dvander@435
   130
	 */
dvander@435
   131
	class IClientListener
dvander@435
   132
	{
dvander@435
   133
	public:
faluco@620
   134
	   /**
faluco@620
   135
		* @brief Returns the current client listener version.
faluco@620
   136
		*
faluco@620
   137
		* @return		Client listener version.
faluco@620
   138
		*/
dvander@541
   139
		virtual unsigned int GetClientListenerVersion()
dvander@435
   140
		{
dvander@435
   141
			return SMINTERFACE_PLAYERMANAGER_VERSION;
dvander@435
   142
		}
dvander@435
   143
	public:
dvander@435
   144
		/**
dvander@435
   145
		 * @brief Called when a client requests connection.
dvander@435
   146
		 *
dvander@435
   147
		 * @param client		Index of the client.
dvander@435
   148
		 * @param error			Error buffer for a disconnect reason.
dvander@435
   149
		 * @param maxlength		Maximum length of error buffer.
dvander@435
   150
		 * @return				True to allow client, false to reject.
dvander@435
   151
		 */
dvander@435
   152
		virtual bool InterceptClientConnect(int client, char *error, size_t maxlength)
dvander@435
   153
		{
dvander@435
   154
			return true;
dvander@435
   155
		}
dvander@435
   156
dvander@435
   157
		/**
dvander@435
   158
		 * @brief Called when a client has connected.
dvander@435
   159
		 *
dvander@435
   160
		 * @param client		Index of the client.
dvander@435
   161
		 */
dvander@435
   162
		virtual void OnClientConnected(int client)
dvander@435
   163
		{
dvander@435
   164
		}
dvander@435
   165
dvander@435
   166
		/**
dvander@435
   167
		 * @brief Called when a client is put in server.
dvander@435
   168
		 *
dvander@435
   169
		 * @param client		Index of the client.
dvander@435
   170
		 */
dvander@435
   171
		virtual void OnClientPutInServer(int client)
dvander@435
   172
		{
dvander@435
   173
		}
dvander@435
   174
dvander@435
   175
		/**
dvander@435
   176
		 * @brief Called when a client is disconnecting (not fully disconnected yet).
dvander@435
   177
		 *
dvander@435
   178
		 * @param client		Index of the client.
dvander@435
   179
		 */
dvander@435
   180
		virtual void OnClientDisconnecting(int client)
dvander@435
   181
		{
dvander@435
   182
		}
dvander@435
   183
dvander@435
   184
		/**
dvander@435
   185
		 * @brief Called when a client has fully disconnected.
dvander@435
   186
		 *
dvander@435
   187
		 * @param client		Index of the client.
dvander@435
   188
		 */
dvander@435
   189
		virtual void OnClientDisconnected(int client)
dvander@435
   190
		{
dvander@435
   191
		}
dvander@435
   192
dvander@435
   193
		/**
ds@729
   194
		 * @brief Called when a client has received authorization.
dvander@435
   195
		 *
dvander@435
   196
		 * @param client		Index of the client.
dvander@435
   197
		 * @param authstring	Authorization string.
dvander@435
   198
		 */
dvander@435
   199
		virtual void OnClientAuthorized(int client, const char *authstring)
dvander@435
   200
		{
dvander@435
   201
		}
dvander@435
   202
	};
dvander@435
   203
dvander@435
   204
	class IPlayerManager : public SMInterface
dvander@435
   205
	{
dvander@435
   206
	public:
dvander@435
   207
		const char *GetInterfaceName()
dvander@435
   208
		{
dvander@435
   209
			return SMINTERFACE_PLAYERMANAGER_NAME;
dvander@435
   210
		}
dvander@435
   211
		unsigned int GetInterfaceVersion()
dvander@435
   212
		{
dvander@435
   213
			return SMINTERFACE_PLAYERMANAGER_VERSION;
dvander@435
   214
		}
dvander@435
   215
	public:
dvander@435
   216
		/**
dvander@435
   217
		 * @brief Adds a client listener.
dvander@435
   218
		 *
dvander@435
   219
		 * @param listener		Pointer to an IClientListener.
dvander@435
   220
		 */
dvander@435
   221
		virtual void AddClientListener(IClientListener *listener) =0;
dvander@435
   222
dvander@435
   223
		/**
dvander@435
   224
		 * @brief Removes a client listener.
dvander@435
   225
		 *
dvander@435
   226
		 * @param listener		Pointer to an IClientListener.
dvander@435
   227
		 */
dvander@435
   228
		virtual void RemoveClientListener(IClientListener *listener) =0;
dvander@435
   229
dvander@435
   230
		/**
dvander@435
   231
		 * @brief Retrieves an IGamePlayer object by its client index.
dvander@435
   232
		 *
dvander@435
   233
		 * Note: This will return a valid object for any player, connected or not.
dvander@435
   234
		 * Note: Client indexes start at 1, not 0.
dvander@435
   235
		 *
dvander@435
   236
		 * @param client		Index of the client.
dvander@435
   237
		 * @return				An IGamePlayer pointer, or NULL if out of range.
dvander@435
   238
		 */
dvander@435
   239
		virtual IGamePlayer *GetGamePlayer(int client) =0;
dvander@435
   240
dvander@435
   241
		/**
dvander@435
   242
		 * @brief Retrieves an IGamePlayer object by its edict_t pointer.
dvander@435
   243
		 *
dvander@435
   244
		 * @param pEdict		Index of the client
dvander@435
   245
		 * @return				An IGamePlayer pointer, or NULL if out of range.
dvander@435
   246
		 */
dvander@435
   247
		virtual IGamePlayer *GetGamePlayer(edict_t *pEdict) =0;
dvander@435
   248
dvander@435
   249
		/**
dvander@435
   250
		 * @brief Returns the maximum number of clients.
dvander@435
   251
		 *
dvander@435
   252
		 * @return				Maximum number of clients.
dvander@435
   253
		 */
dvander@435
   254
		virtual int GetMaxClients() =0;
dvander@435
   255
dvander@435
   256
		/**
dvander@435
   257
		 * @brief Returns the number of players currently connected.
dvander@435
   258
		 *
dvander@435
   259
		 * @return				Current number of connected clients.
dvander@435
   260
		 */
dvander@435
   261
		virtual int GetNumPlayers() =0;
faluco@682
   262
faluco@682
   263
		/**
faluco@682
   264
		 * @brief Returns the client index by its userid.
faluco@682
   265
		 *
faluco@682
   266
		 * @param userid		Userid of the client.
faluco@682
   267
		 * @return				Client index, or 0 if invalid userid passed.
faluco@682
   268
		 */
faluco@682
   269
		virtual int GetClientOfUserId(int userid) =0;
dvander@435
   270
	};
dvander@435
   271
}
dvander@435
   272
dvander@435
   273
#endif //_INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_