core/CPlayerManager.cpp
changeset 226 4663ea3fc2d3
child 242 9dcd59d9014a
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/core/CPlayerManager.cpp	Thu Dec 28 00:48:09 2006 +0000
     1.3 @@ -0,0 +1,101 @@
     1.4 +#include "CPlayerManager.h"
     1.5 +#include "ForwardSys.h"
     1.6 +
     1.7 +SH_DECL_HOOK5(IServerGameClients, ClientConnect, SH_NOATTRIB, 0, bool, edict_t *, const char *, const char *, char *, int);
     1.8 +SH_DECL_HOOK2_void(IServerGameClients, ClientPutInServer, SH_NOATTRIB, 0, edict_t *, const char *);
     1.9 +SH_DECL_HOOK1_void(IServerGameClients, ClientDisconnect, SH_NOATTRIB, 0, edict_t *);
    1.10 +SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *);
    1.11 +
    1.12 +void CPlayerManager::OnSourceModAllInitialized()
    1.13 +{
    1.14 +	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &CPlayerManager::OnClientConnect, false);
    1.15 +	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &CPlayerManager::OnClientPutInServer, true);
    1.16 +	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect, false);
    1.17 +	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect_Post, true);
    1.18 +	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &CPlayerManager::OnClientCommand, false);
    1.19 +
    1.20 +	/* Register OnClientConnect */
    1.21 +	ParamType p1[] = {Param_Cell, Param_String, Param_Cell};
    1.22 +	m_clconnect = g_Forwards.CreateForward("OnClientConnect", ET_Event, 3, p1);
    1.23 +
    1.24 +	/* Register OnClientPutInServer */
    1.25 +	ParamType p2[] = {Param_Cell};
    1.26 +	m_clputinserver = g_Forwards.CreateForward("OnClientPutInServer", ET_Ignore, 1, p2);
    1.27 +
    1.28 +	/* Register OnClientDisconnect */
    1.29 +	m_cldisconnect = g_Forwards.CreateForward("OnClientDisconnect", ET_Ignore, 1, p2);
    1.30 +
    1.31 +	/* Register OnClientDisconnect_Post */
    1.32 +	m_cldisconnect_post = g_Forwards.CreateForward("OnClientDisconnect_Post", ET_Ignore, 1, p2);
    1.33 +
    1.34 +	/* Register OnClientCommand */
    1.35 +	m_clcommand = g_Forwards.CreateForward("OnClientCommand", ET_Hook, 1, p2);
    1.36 +
    1.37 +	/* Register OnClientAuthorized */
    1.38 +	//:TODO:
    1.39 +}
    1.40 +
    1.41 +void CPlayerManager::OnSourceModShutdown()
    1.42 +{
    1.43 +	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &CPlayerManager::OnClientConnect, false);
    1.44 +	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &CPlayerManager::OnClientPutInServer, true);
    1.45 +	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect, false);
    1.46 +	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect_Post, true);
    1.47 +	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &CPlayerManager::OnClientCommand, false);
    1.48 +
    1.49 +	/* Release forwards */
    1.50 +	g_Forwards.ReleaseForward(m_clconnect);
    1.51 +	g_Forwards.ReleaseForward(m_clputinserver);
    1.52 +	g_Forwards.ReleaseForward(m_cldisconnect);
    1.53 +	g_Forwards.ReleaseForward(m_cldisconnect_post);
    1.54 +	g_Forwards.ReleaseForward(m_clcommand);
    1.55 +}
    1.56 +
    1.57 +bool CPlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen)
    1.58 +{
    1.59 +	cell_t res = 1;
    1.60 +
    1.61 +	m_clconnect->PushCell(engine->IndexOfEdict(pEntity));
    1.62 +	m_clconnect->PushStringEx(reject, maxrejectlen, SM_PARAM_STRING_UTF8, SM_PARAM_COPYBACK);
    1.63 +	m_clconnect->PushCell(maxrejectlen);
    1.64 +	m_clconnect->Execute(&res, NULL);
    1.65 +
    1.66 +	return (res) ? true : false;
    1.67 +}
    1.68 +
    1.69 +void CPlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername)
    1.70 +{
    1.71 +	cell_t res;
    1.72 +
    1.73 +	m_clputinserver->PushCell(engine->IndexOfEdict(pEntity));
    1.74 +	m_clputinserver->Execute(&res, NULL);
    1.75 +}
    1.76 +
    1.77 +void CPlayerManager::OnClientAuthorized()
    1.78 +{
    1.79 +	//:TODO:
    1.80 +}
    1.81 +
    1.82 +void CPlayerManager::OnClientDisconnect(edict_t *pEntity)
    1.83 +{
    1.84 +	cell_t res;
    1.85 +
    1.86 +	m_cldisconnect->PushCell(engine->IndexOfEdict(pEntity));
    1.87 +	m_cldisconnect->Execute(&res, NULL);
    1.88 +}
    1.89 +
    1.90 +void CPlayerManager::OnClientDisconnect_Post(edict_t *pEntity)
    1.91 +{
    1.92 +	cell_t res;
    1.93 +
    1.94 +	m_cldisconnect_post->PushCell(engine->IndexOfEdict(pEntity));
    1.95 +	m_cldisconnect_post->Execute(&res, NULL);
    1.96 +}
    1.97 +
    1.98 +void CPlayerManager::OnClientCommand(edict_t *pEntity)
    1.99 +{
   1.100 +	cell_t res;
   1.101 +
   1.102 +	m_clcommand->PushCell(engine->IndexOfEdict(pEntity));
   1.103 +	m_clcommand->Execute(&res, NULL);
   1.104 +}
   1.105 \ No newline at end of file