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 +}