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