core/PlayerManager.cpp
changeset 1350 d5af97658c2e
parent 1335 2047dc42d800
child 1352 4241c756c278
     1.1 --- a/core/PlayerManager.cpp	Sat Aug 18 19:43:37 2007 +0000
     1.2 +++ b/core/PlayerManager.cpp	Sat Aug 18 21:36:42 2007 +0000
     1.3 @@ -41,6 +41,7 @@
     1.4  #include <inetchannel.h>
     1.5  #include <iclient.h>
     1.6  #include "TimerSys.h"
     1.7 +#include "Logger.h"
     1.8  
     1.9  PlayerManager g_Players;
    1.10  bool g_OnMapStarted = false;
    1.11 @@ -63,6 +64,11 @@
    1.12  		int client = g_Players.GetClientOfUserId(userid);
    1.13  		if (client)
    1.14  		{
    1.15 +#if defined CLIENT_DEBUG
    1.16 +			g_Logger.LogMessage("[CL_DEBUG] KickPlayerTimer (userid %d) (client %d)", 
    1.17 +				client,
    1.18 +				userid);
    1.19 +#endif
    1.20  			CPlayer *player = g_Players.GetPlayerByIndex(client);
    1.21  			player->Kick("Your name is reserved by SourceMod; set your password to use it.");
    1.22  		}
    1.23 @@ -118,8 +124,34 @@
    1.24  	PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1);
    1.25  }
    1.26  
    1.27 +#if defined CLIENT_DEBUG
    1.28 +SH_DECL_HOOK1_void(IServerGameEnts, FreeContainingEntity, SH_NOATTRIB, false, edict_t *);
    1.29 +
    1.30 +void FreeContainingEntity(edict_t *pEdict)
    1.31 +{
    1.32 +	if (!pEdict || pEdict->IsFree())
    1.33 +	{
    1.34 +		return;
    1.35 +	}
    1.36 +
    1.37 +	int client = engine->IndexOfEdict(pEdict);
    1.38 +	if (client >= 1 && client <= g_Players.MaxClients())
    1.39 +	{
    1.40 +		g_Logger.LogMessage("[CL_DEBUG] FreeContainingEntity(%p) (client %d) (pUnknown %p)",
    1.41 +			pEdict,
    1.42 +			client,
    1.43 +			pEdict->GetUnknown());
    1.44 +	}
    1.45 +}
    1.46 +#endif
    1.47 +
    1.48  void PlayerManager::OnSourceModShutdown()
    1.49  {
    1.50 +#if defined CLIENT_DEBUG
    1.51 +	IServerGameEnts *ents = (IServerGameEnts *)(g_SMAPI->serverFactory(false))(INTERFACEVERSION_SERVERGAMEENTS, NULL);
    1.52 +	SH_ADD_HOOK_STATICFUNC(IServerGameEnts, FreeContainingEntity, ents, FreeContainingEntity, false);
    1.53 +#endif
    1.54 +
    1.55  	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect, false);
    1.56  	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &PlayerManager::OnClientPutInServer, true);
    1.57  	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect, false);
    1.58 @@ -314,6 +346,10 @@
    1.59  {
    1.60  	int client = engine->IndexOfEdict(pEntity);
    1.61  
    1.62 +#if defined CLIENT_DEBUG
    1.63 +	g_Logger.LogMessage("[CL_DEBUG] OnClientConnect(%p, %s, %s) (client %d)", pEntity, pszName, pszAddress, client);
    1.64 +#endif
    1.65 +
    1.66  	List<IClientListener *>::iterator iter;
    1.67  	IClientListener *pListener = NULL;
    1.68  	for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
    1.69 @@ -354,6 +390,16 @@
    1.70  	int client = engine->IndexOfEdict(pEntity);
    1.71  	bool orig_value = META_RESULT_ORIG_RET(bool);
    1.72  	CPlayer *pPlayer = GetPlayerByIndex(client);
    1.73 +
    1.74 +#if defined CLIENT_DEBUG
    1.75 +	g_Logger.LogMessage("[CL_DEBUG] OnClientConnect_Post(%p, %s, %s) (client %d) (orig_value %d)", 
    1.76 +		pEntity, 
    1.77 +		pszName, 
    1.78 +		pszAddress, 
    1.79 +		client,
    1.80 +		orig_value);
    1.81 +#endif
    1.82 +
    1.83  	if (orig_value)
    1.84  	{
    1.85  		List<IClientListener *>::iterator iter;
    1.86 @@ -377,6 +423,10 @@
    1.87  	cell_t res;
    1.88  	int client = engine->IndexOfEdict(pEntity);
    1.89  
    1.90 +#if defined CLIENT_DEBUG
    1.91 +	g_Logger.LogMessage("[CL_DEBUG] OnClientPutInServer(%p, %s) (client %d)", pEntity, playername, client);
    1.92 +#endif
    1.93 +
    1.94  	CPlayer *pPlayer = GetPlayerByIndex(client);
    1.95  	/* If they're not connected, they're a bot */
    1.96  	if (!pPlayer->IsConnected())
    1.97 @@ -436,6 +486,10 @@
    1.98  		pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity);
    1.99  	}
   1.100  
   1.101 +#if defined CLIENT_DEBUG
   1.102 +	g_Logger.LogMessage("[CL_DEBUG] OnClientPutInServer() (m_Info %p)", pPlayer->m_Info);
   1.103 +#endif
   1.104 +
   1.105  	List<IClientListener *>::iterator iter;
   1.106  	IClientListener *pListener = NULL;
   1.107  	for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
   1.108 @@ -462,6 +516,9 @@
   1.109  	{
   1.110  		if (m_Players[i].IsConnected() && m_Players[i].IsFakeClient())
   1.111  		{
   1.112 +#if defined CLIENT_DEBUG
   1.113 +			g_Logger.LogMessage("[CL_DEBUG] OnSourceModLevelChange() (client %d)", i);
   1.114 +#endif
   1.115  			OnClientDisconnect(m_Players[i].GetEdict());
   1.116  		}
   1.117  	}
   1.118 @@ -472,6 +529,13 @@
   1.119  	cell_t res;
   1.120  	int client = engine->IndexOfEdict(pEntity);
   1.121  
   1.122 +#if defined CLIENT_DEBUG
   1.123 +	g_Logger.LogMessage("[CL_DEBUG] OnClientDisconnect(%p) (client %d) (pUnknown %p)", 
   1.124 +		pEntity, 
   1.125 +		client,
   1.126 +		pEntity->GetUnknown());
   1.127 +#endif
   1.128 +
   1.129  	if (m_Players[client].IsConnected())
   1.130  	{
   1.131  		m_cldisconnect->PushCell(client);
   1.132 @@ -521,6 +585,13 @@
   1.133  	cell_t res;
   1.134  	int client = engine->IndexOfEdict(pEntity);
   1.135  
   1.136 +#if defined CLIENT_DEBUG
   1.137 +	g_Logger.LogMessage("[CL_DEBUG] OnClientDisconnect(%p) (client %d) (pUnknown %p)", 
   1.138 +		pEntity, 
   1.139 +		client,
   1.140 +		pEntity->GetUnknown());
   1.141 +#endif
   1.142 +
   1.143  	m_cldisconnect_post->PushCell(client);
   1.144  	m_cldisconnect_post->Execute(&res, NULL);
   1.145  
   1.146 @@ -832,6 +903,7 @@
   1.147  	m_pEdict = NULL;
   1.148  	m_Info = NULL;
   1.149  	m_bAdminCheckSignalled = false;
   1.150 +	m_UserId = -1;
   1.151  }
   1.152  
   1.153  void CPlayer::SetName(const char *name)
   1.154 @@ -1008,3 +1080,13 @@
   1.155  		}
   1.156  	}
   1.157  }
   1.158 +
   1.159 +int CPlayer::GetUserId()
   1.160 +{
   1.161 +	if (m_UserId == -1)
   1.162 +	{
   1.163 +		m_UserId = engine->GetPlayerUserId(GetEdict());
   1.164 +	}
   1.165 +
   1.166 +	return m_UserId;
   1.167 +}