core/PlayerManager.h
author David Anderson <dvander@alliedmods.net>
Thu Jun 21 23:06:37 2007 +0000 (2007-06-21)
changeset 997 2fc3152c3118
parent 916 39ae94ad60ce
child 1160 7d8b449edd60
permissions -rw-r--r--
bumped menu api again - added feature to get menu end reason
dvander@591
     1
/**
ds@653
     2
 * vim: set ts=4 :
dvander@591
     3
 * ===============================================================
dvander@591
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@591
     5
 * ===============================================================
dvander@591
     6
 *
dvander@591
     7
 * This file is not open source and may not be copied without explicit
dvander@591
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@591
     9
 * in whole or significant part.
dvander@591
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@591
    11
 *
dvander@591
    12
 * Version: $Id$
dvander@591
    13
 */
dvander@591
    14
dvander@591
    15
#ifndef _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_
dvander@591
    16
#define _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_
dvander@591
    17
dvander@591
    18
#include "sm_globals.h"
dvander@591
    19
#include <eiface.h>
dvander@591
    20
#include "sourcemm_api.h"
dvander@591
    21
#include <IForwardSys.h>
dvander@591
    22
#include <IPlayerHelpers.h>
dvander@591
    23
#include <IAdminSystem.h>
dvander@591
    24
#include <sh_string.h>
dvander@591
    25
#include <sh_list.h>
dvander@591
    26
#include <sh_vector.h>
dvander@591
    27
dvander@591
    28
using namespace SourceHook;
dvander@591
    29
dvander@591
    30
class CPlayer : public IGamePlayer
dvander@591
    31
{
dvander@616
    32
	friend class PlayerManager;
dvander@591
    33
public:
dvander@591
    34
	CPlayer();
dvander@591
    35
public:
dvander@615
    36
	const char *GetName();
dvander@615
    37
	const char *GetIPAddress();
dvander@615
    38
	const char *GetAuthString();
dvander@615
    39
	edict_t *GetEdict();
dvander@615
    40
	bool IsInGame();
dvander@615
    41
	bool IsConnected();
dvander@615
    42
	bool IsAuthorized();
dvander@615
    43
	bool IsFakeClient();
dvander@591
    44
	void SetAdminId(AdminId id, bool temporary);
dvander@615
    45
	AdminId GetAdminId();
dvander@644
    46
public:
dvander@644
    47
	IPlayerInfo *GetPlayerInfo();
dvander@591
    48
private:
dvander@591
    49
	void Initialize(const char *name, const char *ip, edict_t *pEntity);
dvander@591
    50
	void Connect();
dvander@591
    51
	void Authorize(const char *steamid);
dvander@591
    52
	void Disconnect();
dvander@591
    53
	void SetName(const char *name);
dvander@591
    54
	void DumpAdmin(bool deleting);
dvander@591
    55
private:
dvander@591
    56
	bool m_IsConnected;
dvander@591
    57
	bool m_IsInGame;
dvander@591
    58
	bool m_IsAuthorized;
dvander@591
    59
	String m_Name;
dvander@591
    60
	String m_Ip;
dvander@591
    61
	String m_AuthID;
dvander@591
    62
	AdminId m_Admin;
dvander@591
    63
	bool m_TempAdmin;
dvander@591
    64
	edict_t *m_pEdict;
dvander@644
    65
	IPlayerInfo *m_Info;
dvander@591
    66
};
dvander@591
    67
dvander@616
    68
class PlayerManager : 
dvander@591
    69
	public SMGlobalClass,
dvander@591
    70
	public IPlayerManager
dvander@591
    71
{
dvander@591
    72
public:
dvander@616
    73
	PlayerManager();
dvander@616
    74
	~PlayerManager();
dvander@591
    75
public: //SMGlobalClass
dvander@591
    76
	void OnSourceModAllInitialized();
dvander@591
    77
	void OnSourceModShutdown();
dvander@916
    78
	void OnSourceModLevelEnd();
dvander@591
    79
public:
dvander@591
    80
	CPlayer *GetPlayerByIndex(int client) const;
dvander@591
    81
	void RunAuthChecks();
dvander@591
    82
	void ClearAdminId(AdminId id);
dvander@591
    83
	void ClearAllAdmins();
dvander@591
    84
public:
dvander@591
    85
	bool OnClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen);
dvander@591
    86
	bool OnClientConnect_Post(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen);
dvander@591
    87
	void OnClientPutInServer(edict_t *pEntity, char const *playername);
dvander@591
    88
	void OnClientDisconnect(edict_t *pEntity);
dvander@591
    89
	void OnClientDisconnect_Post(edict_t *pEntity);
dvander@591
    90
	void OnClientCommand(edict_t *pEntity);
dvander@591
    91
	void OnClientSettingsChanged(edict_t *pEntity);
dvander@591
    92
public: //IPlayerManager
dvander@591
    93
	void AddClientListener(IClientListener *listener);
dvander@591
    94
	void RemoveClientListener(IClientListener *listener);
dvander@591
    95
	IGamePlayer *GetGamePlayer(int client);
dvander@591
    96
	IGamePlayer *GetGamePlayer(edict_t *pEdict);
dvander@591
    97
	int GetMaxClients();
dvander@591
    98
	int GetNumPlayers();
faluco@682
    99
	int GetClientOfUserId(int userid);
dvander@591
   100
public:
dvander@591
   101
	inline int MaxClients()
dvander@591
   102
	{
dvander@591
   103
		return m_maxClients;
dvander@591
   104
	}
dvander@591
   105
	inline int NumPlayers()
dvander@591
   106
	{
dvander@591
   107
		return m_PlayerCount;
dvander@591
   108
	}
dvander@591
   109
private:
dvander@591
   110
	void OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax);
dvander@591
   111
private:
dvander@591
   112
	List<IClientListener *> m_hooks;
dvander@591
   113
	IForward *m_clconnect;
dvander@591
   114
	IForward *m_cldisconnect;
dvander@591
   115
	IForward *m_cldisconnect_post;
dvander@591
   116
	IForward *m_clputinserver;
dvander@591
   117
	IForward *m_clcommand;
dvander@591
   118
	IForward *m_clinfochanged;
dvander@591
   119
	IForward *m_clauth;
dvander@643
   120
	IForward *m_onActivate;
dvander@717
   121
	IForward *m_onActivate2;
dvander@591
   122
	CPlayer *m_Players;
faluco@682
   123
	int *m_UserIdLookUp;
dvander@591
   124
	int m_maxClients;
dvander@591
   125
	int m_PlayerCount;
dvander@591
   126
	bool m_FirstPass;
dvander@591
   127
	unsigned int *m_AuthQueue;
dvander@591
   128
};
dvander@591
   129
dvander@616
   130
extern PlayerManager g_Players;
dvander@848
   131
extern bool g_OnMapStarted;
dvander@591
   132
dvander@591
   133
#endif //_INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_