dvander@370: /** dvander@370: * =============================================================== dvander@370: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@370: * =============================================================== dvander@370: * dvander@370: * This file is not open source and may not be copied without explicit dvander@370: * written permission of AlliedModders LLC. This file may not be redistributed dvander@370: * in whole or significant part. dvander@370: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@370: * dvander@370: * Version: $Id$ dvander@370: */ dvander@370: faluco@226: #ifndef _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_ faluco@226: #define _INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_ faluco@226: faluco@242: #include "sm_globals.h" faluco@226: #include faluco@226: #include "sourcemm_api.h" faluco@226: #include dvander@435: #include dvander@458: #include dvander@435: #include dvander@435: #include dvander@448: #include dvander@435: dvander@435: using namespace SourceHook; faluco@242: dvander@435: class CPlayer : public IGamePlayer dvander@435: { dvander@435: friend class CPlayerManager; dvander@435: public: dvander@435: CPlayer(); dvander@435: public: dvander@435: const char *GetName() const; dvander@435: const char *GetIPAddress() const; dvander@435: const char *GetAuthString() const; dvander@435: edict_t *GetEdict() const; dvander@435: bool IsInGame() const; dvander@435: bool IsConnected() const; dvander@435: bool IsAuthorized() const; dvander@435: bool IsFakeClient() const; dvander@458: void SetAdminId(AdminId id, bool temporary); dvander@458: AdminId GetAdminId() const; dvander@435: private: dvander@435: void Initialize(const char *name, const char *ip, edict_t *pEntity); dvander@435: void Connect(); dvander@435: void Authorize(const char *steamid); dvander@435: void Disconnect(); dvander@435: void SetName(const char *name); dvander@458: void DumpAdmin(bool deleting); dvander@435: private: dvander@435: bool m_IsConnected; dvander@435: bool m_IsInGame; dvander@435: bool m_IsAuthorized; dvander@435: String m_Name; dvander@435: String m_Ip; dvander@435: String m_AuthID; dvander@458: AdminId m_Admin; dvander@458: bool m_TempAdmin; dvander@448: edict_t *m_pEdict; dvander@435: }; faluco@226: dvander@435: class CPlayerManager : dvander@435: public SMGlobalClass, dvander@435: public IPlayerManager faluco@226: { faluco@269: public: dvander@448: CPlayerManager(); dvander@448: ~CPlayerManager(); faluco@226: public: //SMGlobalClass faluco@430: void OnSourceModAllInitialized(); faluco@430: void OnSourceModShutdown(); faluco@226: public: faluco@242: CPlayer *GetPlayerByIndex(int client) const; dvander@448: void RunAuthChecks(); dvander@458: void ClearAdminId(AdminId id); dvander@458: void ClearAllAdmins(); faluco@242: public: faluco@226: bool OnClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen); dvander@435: bool OnClientConnect_Post(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen); faluco@226: void OnClientPutInServer(edict_t *pEntity, char const *playername); faluco@226: void OnClientDisconnect(edict_t *pEntity); faluco@226: void OnClientDisconnect_Post(edict_t *pEntity); faluco@226: void OnClientAuthorized(); //:TODO: any args needed? faluco@226: void OnClientCommand(edict_t *pEntity); faluco@242: void OnClientSettingsChanged(edict_t *pEntity); dvander@435: public: //IPlayerManager dvander@435: void AddClientListener(IClientListener *listener); dvander@435: void RemoveClientListener(IClientListener *listener); dvander@435: IGamePlayer *GetGamePlayer(int client); dvander@435: IGamePlayer *GetGamePlayer(edict_t *pEdict); dvander@435: int GetMaxClients(); dvander@435: int GetNumPlayers(); dvander@435: public: dvander@435: inline int MaxClients() dvander@435: { dvander@435: return m_maxClients; dvander@435: } dvander@435: inline int NumPlayers() dvander@435: { dvander@435: return m_PlayerCount; dvander@435: } faluco@226: private: faluco@268: void OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax); faluco@268: private: dvander@435: List m_hooks; faluco@226: IForward *m_clconnect; faluco@226: IForward *m_cldisconnect; faluco@226: IForward *m_cldisconnect_post; faluco@226: IForward *m_clputinserver; faluco@226: IForward *m_clcommand; faluco@242: IForward *m_clinfochanged; dvander@448: IForward *m_clauth; faluco@242: CPlayer *m_Players; faluco@242: int m_maxClients; faluco@242: int m_PlayerCount; faluco@269: bool m_FirstPass; dvander@448: unsigned int *m_AuthQueue; faluco@226: }; faluco@226: dvander@448: extern CPlayerManager g_Players; faluco@242: faluco@242: #endif //_INCLUDE_SOURCEMOD_CPLAYERMANAGER_H_