core/CPlayerManager.h
author David Anderson <dvander@alliedmods.net>
Thu Feb 08 01:11:45 2007 +0000 (2007-02-08)
changeset 453 7611078f11cd
parent 448 25984ddd0ce0
child 458 77520125ee67
permissions -rw-r--r--
added gameevents to the publicly available interfaces
dvander@370
     1
/**
dvander@370
     2
 * ===============================================================
dvander@370
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@370
     4
 * ===============================================================
dvander@370
     5
 *
dvander@370
     6
 * This file is not open source and may not be copied without explicit
dvander@370
     7
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@370
     8
 * in whole or significant part.
dvander@370
     9
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@370
    10
 *
dvander@370
    11
 * Version: $Id$
dvander@370
    12
 */
dvander@370
    13
faluco@226
    14
#ifndef _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_
faluco@226
    15
#define _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_
faluco@226
    16
faluco@242
    17
#include "sm_globals.h"
faluco@226
    18
#include <eiface.h>
faluco@226
    19
#include "sourcemm_api.h"
faluco@226
    20
#include <IForwardSys.h>
dvander@435
    21
#include <IPlayerHelpers.h>
dvander@435
    22
#include <sh_string.h>
dvander@435
    23
#include <sh_list.h>
dvander@448
    24
#include <sh_vector.h>
dvander@435
    25
dvander@435
    26
using namespace SourceHook;
faluco@242
    27
dvander@435
    28
class CPlayer : public IGamePlayer
dvander@435
    29
{
dvander@435
    30
	friend class CPlayerManager;
dvander@435
    31
public:
dvander@435
    32
	CPlayer();
dvander@435
    33
public:
dvander@435
    34
	const char *GetName() const;
dvander@435
    35
	const char *GetIPAddress() const;
dvander@435
    36
	const char *GetAuthString() const;
dvander@435
    37
	edict_t *GetEdict() const;
dvander@435
    38
	bool IsInGame() const;
dvander@435
    39
	bool IsConnected() const;
dvander@435
    40
	bool IsAuthorized() const;
dvander@435
    41
	bool IsFakeClient() const;
dvander@435
    42
private:
dvander@435
    43
	void Initialize(const char *name, const char *ip, edict_t *pEntity);
dvander@435
    44
	void Connect();
dvander@435
    45
	void Authorize(const char *steamid);
dvander@435
    46
	void Disconnect();
dvander@435
    47
	void SetName(const char *name);
dvander@435
    48
private:
dvander@435
    49
	bool m_IsConnected;
dvander@435
    50
	bool m_IsInGame;
dvander@435
    51
	bool m_IsAuthorized;
dvander@435
    52
	String m_Name;
dvander@435
    53
	String m_Ip;
dvander@435
    54
	String m_AuthID;
dvander@448
    55
	edict_t *m_pEdict;
dvander@435
    56
};
faluco@226
    57
dvander@435
    58
class CPlayerManager : 
dvander@435
    59
	public SMGlobalClass,
dvander@435
    60
	public IPlayerManager
faluco@226
    61
{
faluco@269
    62
public:
dvander@448
    63
	CPlayerManager();
dvander@448
    64
	~CPlayerManager();
faluco@226
    65
public: //SMGlobalClass
faluco@430
    66
	void OnSourceModAllInitialized();
faluco@430
    67
	void OnSourceModShutdown();
faluco@226
    68
public:
faluco@242
    69
	CPlayer *GetPlayerByIndex(int client) const;
dvander@448
    70
	void RunAuthChecks();
faluco@242
    71
public:
faluco@226
    72
	bool OnClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen);
dvander@435
    73
	bool OnClientConnect_Post(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen);
faluco@226
    74
	void OnClientPutInServer(edict_t *pEntity, char const *playername);
faluco@226
    75
	void OnClientDisconnect(edict_t *pEntity);
faluco@226
    76
	void OnClientDisconnect_Post(edict_t *pEntity);
faluco@226
    77
	void OnClientAuthorized(); //:TODO: any args needed?
faluco@226
    78
	void OnClientCommand(edict_t *pEntity);
faluco@242
    79
	void OnClientSettingsChanged(edict_t *pEntity);
dvander@435
    80
public: //IPlayerManager
dvander@435
    81
	void AddClientListener(IClientListener *listener);
dvander@435
    82
	void RemoveClientListener(IClientListener *listener);
dvander@435
    83
	IGamePlayer *GetGamePlayer(int client);
dvander@435
    84
	IGamePlayer *GetGamePlayer(edict_t *pEdict);
dvander@435
    85
	int GetMaxClients();
dvander@435
    86
	int GetNumPlayers();
dvander@435
    87
public:
dvander@435
    88
	inline int MaxClients()
dvander@435
    89
	{
dvander@435
    90
		return m_maxClients;
dvander@435
    91
	}
dvander@435
    92
	inline int NumPlayers()
dvander@435
    93
	{
dvander@435
    94
		return m_PlayerCount;
dvander@435
    95
	}
faluco@226
    96
private:
faluco@268
    97
	void OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax);
faluco@268
    98
private:
dvander@435
    99
	List<IClientListener *> m_hooks;
faluco@226
   100
	IForward *m_clconnect;
faluco@226
   101
	IForward *m_cldisconnect;
faluco@226
   102
	IForward *m_cldisconnect_post;
faluco@226
   103
	IForward *m_clputinserver;
faluco@226
   104
	IForward *m_clcommand;
faluco@242
   105
	IForward *m_clinfochanged;
dvander@448
   106
	IForward *m_clauth;
faluco@242
   107
	CPlayer *m_Players;
faluco@242
   108
	int m_maxClients;
faluco@242
   109
	int m_PlayerCount;
faluco@269
   110
	bool m_FirstPass;
dvander@448
   111
	unsigned int *m_AuthQueue;
faluco@226
   112
};
faluco@226
   113
dvander@448
   114
extern CPlayerManager g_Players;
faluco@242
   115
faluco@242
   116
#endif //_INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_