- added debugging messages for a bug report
- added userid function to IGamePlayer --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401356
This commit is contained in:
parent
edc535ee3c
commit
ee6f77d05f
@ -41,6 +41,7 @@
|
|||||||
#include <inetchannel.h>
|
#include <inetchannel.h>
|
||||||
#include <iclient.h>
|
#include <iclient.h>
|
||||||
#include "TimerSys.h"
|
#include "TimerSys.h"
|
||||||
|
#include "Logger.h"
|
||||||
|
|
||||||
PlayerManager g_Players;
|
PlayerManager g_Players;
|
||||||
bool g_OnMapStarted = false;
|
bool g_OnMapStarted = false;
|
||||||
@ -63,6 +64,11 @@ public:
|
|||||||
int client = g_Players.GetClientOfUserId(userid);
|
int client = g_Players.GetClientOfUserId(userid);
|
||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] KickPlayerTimer (userid %d) (client %d)",
|
||||||
|
client,
|
||||||
|
userid);
|
||||||
|
#endif
|
||||||
CPlayer *player = g_Players.GetPlayerByIndex(client);
|
CPlayer *player = g_Players.GetPlayerByIndex(client);
|
||||||
player->Kick("Your name is reserved by SourceMod; set your password to use it.");
|
player->Kick("Your name is reserved by SourceMod; set your password to use it.");
|
||||||
}
|
}
|
||||||
@ -118,8 +124,34 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1);
|
PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
SH_DECL_HOOK1_void(IServerGameEnts, FreeContainingEntity, SH_NOATTRIB, false, edict_t *);
|
||||||
|
|
||||||
|
void FreeContainingEntity(edict_t *pEdict)
|
||||||
|
{
|
||||||
|
if (!pEdict || pEdict->IsFree())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int client = engine->IndexOfEdict(pEdict);
|
||||||
|
if (client >= 1 && client <= g_Players.MaxClients())
|
||||||
|
{
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] FreeContainingEntity(%p) (client %d) (pUnknown %p)",
|
||||||
|
pEdict,
|
||||||
|
client,
|
||||||
|
pEdict->GetUnknown());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void PlayerManager::OnSourceModShutdown()
|
void PlayerManager::OnSourceModShutdown()
|
||||||
{
|
{
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
IServerGameEnts *ents = (IServerGameEnts *)(g_SMAPI->serverFactory(false))(INTERFACEVERSION_SERVERGAMEENTS, NULL);
|
||||||
|
SH_ADD_HOOK_STATICFUNC(IServerGameEnts, FreeContainingEntity, ents, FreeContainingEntity, false);
|
||||||
|
#endif
|
||||||
|
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect, false);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect, false);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &PlayerManager::OnClientPutInServer, true);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &PlayerManager::OnClientPutInServer, true);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect, false);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect, false);
|
||||||
@ -314,6 +346,10 @@ bool PlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const
|
|||||||
{
|
{
|
||||||
int client = engine->IndexOfEdict(pEntity);
|
int client = engine->IndexOfEdict(pEntity);
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientConnect(%p, %s, %s) (client %d)", pEntity, pszName, pszAddress, client);
|
||||||
|
#endif
|
||||||
|
|
||||||
List<IClientListener *>::iterator iter;
|
List<IClientListener *>::iterator iter;
|
||||||
IClientListener *pListener = NULL;
|
IClientListener *pListener = NULL;
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
@ -354,6 +390,16 @@ bool PlayerManager::OnClientConnect_Post(edict_t *pEntity, const char *pszName,
|
|||||||
int client = engine->IndexOfEdict(pEntity);
|
int client = engine->IndexOfEdict(pEntity);
|
||||||
bool orig_value = META_RESULT_ORIG_RET(bool);
|
bool orig_value = META_RESULT_ORIG_RET(bool);
|
||||||
CPlayer *pPlayer = GetPlayerByIndex(client);
|
CPlayer *pPlayer = GetPlayerByIndex(client);
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientConnect_Post(%p, %s, %s) (client %d) (orig_value %d)",
|
||||||
|
pEntity,
|
||||||
|
pszName,
|
||||||
|
pszAddress,
|
||||||
|
client,
|
||||||
|
orig_value);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (orig_value)
|
if (orig_value)
|
||||||
{
|
{
|
||||||
List<IClientListener *>::iterator iter;
|
List<IClientListener *>::iterator iter;
|
||||||
@ -377,6 +423,10 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
|
|||||||
cell_t res;
|
cell_t res;
|
||||||
int client = engine->IndexOfEdict(pEntity);
|
int client = engine->IndexOfEdict(pEntity);
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientPutInServer(%p, %s) (client %d)", pEntity, playername, client);
|
||||||
|
#endif
|
||||||
|
|
||||||
CPlayer *pPlayer = GetPlayerByIndex(client);
|
CPlayer *pPlayer = GetPlayerByIndex(client);
|
||||||
/* If they're not connected, they're a bot */
|
/* If they're not connected, they're a bot */
|
||||||
if (!pPlayer->IsConnected())
|
if (!pPlayer->IsConnected())
|
||||||
@ -436,6 +486,10 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
|
|||||||
pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity);
|
pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientPutInServer() (m_Info %p)", pPlayer->m_Info);
|
||||||
|
#endif
|
||||||
|
|
||||||
List<IClientListener *>::iterator iter;
|
List<IClientListener *>::iterator iter;
|
||||||
IClientListener *pListener = NULL;
|
IClientListener *pListener = NULL;
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
@ -462,6 +516,9 @@ void PlayerManager::OnSourceModLevelEnd()
|
|||||||
{
|
{
|
||||||
if (m_Players[i].IsConnected() && m_Players[i].IsFakeClient())
|
if (m_Players[i].IsConnected() && m_Players[i].IsFakeClient())
|
||||||
{
|
{
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnSourceModLevelChange() (client %d)", i);
|
||||||
|
#endif
|
||||||
OnClientDisconnect(m_Players[i].GetEdict());
|
OnClientDisconnect(m_Players[i].GetEdict());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -472,6 +529,13 @@ void PlayerManager::OnClientDisconnect(edict_t *pEntity)
|
|||||||
cell_t res;
|
cell_t res;
|
||||||
int client = engine->IndexOfEdict(pEntity);
|
int client = engine->IndexOfEdict(pEntity);
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientDisconnect(%p) (client %d) (pUnknown %p)",
|
||||||
|
pEntity,
|
||||||
|
client,
|
||||||
|
pEntity->GetUnknown());
|
||||||
|
#endif
|
||||||
|
|
||||||
if (m_Players[client].IsConnected())
|
if (m_Players[client].IsConnected())
|
||||||
{
|
{
|
||||||
m_cldisconnect->PushCell(client);
|
m_cldisconnect->PushCell(client);
|
||||||
@ -521,6 +585,13 @@ void PlayerManager::OnClientDisconnect_Post(edict_t *pEntity)
|
|||||||
cell_t res;
|
cell_t res;
|
||||||
int client = engine->IndexOfEdict(pEntity);
|
int client = engine->IndexOfEdict(pEntity);
|
||||||
|
|
||||||
|
#if defined CLIENT_DEBUG
|
||||||
|
g_Logger.LogMessage("[CL_DEBUG] OnClientDisconnect(%p) (client %d) (pUnknown %p)",
|
||||||
|
pEntity,
|
||||||
|
client,
|
||||||
|
pEntity->GetUnknown());
|
||||||
|
#endif
|
||||||
|
|
||||||
m_cldisconnect_post->PushCell(client);
|
m_cldisconnect_post->PushCell(client);
|
||||||
m_cldisconnect_post->Execute(&res, NULL);
|
m_cldisconnect_post->Execute(&res, NULL);
|
||||||
|
|
||||||
@ -832,6 +903,7 @@ void CPlayer::Disconnect()
|
|||||||
m_pEdict = NULL;
|
m_pEdict = NULL;
|
||||||
m_Info = NULL;
|
m_Info = NULL;
|
||||||
m_bAdminCheckSignalled = false;
|
m_bAdminCheckSignalled = false;
|
||||||
|
m_UserId = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayer::SetName(const char *name)
|
void CPlayer::SetName(const char *name)
|
||||||
@ -1008,3 +1080,13 @@ void CPlayer::DoBasicAdminChecks()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CPlayer::GetUserId()
|
||||||
|
{
|
||||||
|
if (m_UserId == -1)
|
||||||
|
{
|
||||||
|
m_UserId = engine->GetPlayerUserId(GetEdict());
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_UserId;
|
||||||
|
}
|
||||||
|
@ -62,6 +62,7 @@ public:
|
|||||||
AdminId GetAdminId();
|
AdminId GetAdminId();
|
||||||
void Kick(const char *str);
|
void Kick(const char *str);
|
||||||
IPlayerInfo *GetPlayerInfo();
|
IPlayerInfo *GetPlayerInfo();
|
||||||
|
int GetUserId();
|
||||||
public:
|
public:
|
||||||
void NotifyPostAdminChecks();
|
void NotifyPostAdminChecks();
|
||||||
void DoBasicAdminChecks();
|
void DoBasicAdminChecks();
|
||||||
@ -89,6 +90,7 @@ private:
|
|||||||
String m_LastPassword;
|
String m_LastPassword;
|
||||||
bool m_bAdminCheckSignalled;
|
bool m_bAdminCheckSignalled;
|
||||||
int m_iIndex;
|
int m_iIndex;
|
||||||
|
int m_UserId;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PlayerManager :
|
class PlayerManager :
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include <IAdminSystem.h>
|
#include <IAdminSystem.h>
|
||||||
|
|
||||||
#define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager"
|
#define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager"
|
||||||
#define SMINTERFACE_PLAYERMANAGER_VERSION 1
|
#define SMINTERFACE_PLAYERMANAGER_VERSION 2
|
||||||
|
|
||||||
struct edict_t;
|
struct edict_t;
|
||||||
|
|
||||||
@ -122,6 +122,13 @@ namespace SourceMod
|
|||||||
* @param temp If true, the id will be invalidated on disconnect.
|
* @param temp If true, the id will be invalidated on disconnect.
|
||||||
*/
|
*/
|
||||||
virtual void SetAdminId(AdminId id, bool temp) =0;
|
virtual void SetAdminId(AdminId id, bool temp) =0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the client's userid.
|
||||||
|
*
|
||||||
|
* @return Userid.
|
||||||
|
*/
|
||||||
|
virtual int GetUserId() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user