core/CPlayerManager.cpp
author Borja Ferrer <faluco@alliedmods.net>
Sun Dec 31 03:02:40 2006 +0000 (2006-12-31)
changeset 236 123045747879
parent 226 4663ea3fc2d3
child 242 9dcd59d9014a
permissions -rw-r--r--
fixed atcprintf counting the null terminator for the return value
added format and formatex natives
faluco@226
     1
#include "CPlayerManager.h"
faluco@226
     2
#include "ForwardSys.h"
faluco@226
     3
faluco@226
     4
SH_DECL_HOOK5(IServerGameClients, ClientConnect, SH_NOATTRIB, 0, bool, edict_t *, const char *, const char *, char *, int);
faluco@226
     5
SH_DECL_HOOK2_void(IServerGameClients, ClientPutInServer, SH_NOATTRIB, 0, edict_t *, const char *);
faluco@226
     6
SH_DECL_HOOK1_void(IServerGameClients, ClientDisconnect, SH_NOATTRIB, 0, edict_t *);
faluco@226
     7
SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *);
faluco@226
     8
faluco@226
     9
void CPlayerManager::OnSourceModAllInitialized()
faluco@226
    10
{
faluco@226
    11
	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &CPlayerManager::OnClientConnect, false);
faluco@226
    12
	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &CPlayerManager::OnClientPutInServer, true);
faluco@226
    13
	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect, false);
faluco@226
    14
	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect_Post, true);
faluco@226
    15
	SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &CPlayerManager::OnClientCommand, false);
faluco@226
    16
faluco@226
    17
	/* Register OnClientConnect */
faluco@226
    18
	ParamType p1[] = {Param_Cell, Param_String, Param_Cell};
faluco@226
    19
	m_clconnect = g_Forwards.CreateForward("OnClientConnect", ET_Event, 3, p1);
faluco@226
    20
faluco@226
    21
	/* Register OnClientPutInServer */
faluco@226
    22
	ParamType p2[] = {Param_Cell};
faluco@226
    23
	m_clputinserver = g_Forwards.CreateForward("OnClientPutInServer", ET_Ignore, 1, p2);
faluco@226
    24
faluco@226
    25
	/* Register OnClientDisconnect */
faluco@226
    26
	m_cldisconnect = g_Forwards.CreateForward("OnClientDisconnect", ET_Ignore, 1, p2);
faluco@226
    27
faluco@226
    28
	/* Register OnClientDisconnect_Post */
faluco@226
    29
	m_cldisconnect_post = g_Forwards.CreateForward("OnClientDisconnect_Post", ET_Ignore, 1, p2);
faluco@226
    30
faluco@226
    31
	/* Register OnClientCommand */
faluco@226
    32
	m_clcommand = g_Forwards.CreateForward("OnClientCommand", ET_Hook, 1, p2);
faluco@226
    33
faluco@226
    34
	/* Register OnClientAuthorized */
faluco@226
    35
	//:TODO:
faluco@226
    36
}
faluco@226
    37
faluco@226
    38
void CPlayerManager::OnSourceModShutdown()
faluco@226
    39
{
faluco@226
    40
	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &CPlayerManager::OnClientConnect, false);
faluco@226
    41
	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &CPlayerManager::OnClientPutInServer, true);
faluco@226
    42
	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect, false);
faluco@226
    43
	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &CPlayerManager::OnClientDisconnect_Post, true);
faluco@226
    44
	SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &CPlayerManager::OnClientCommand, false);
faluco@226
    45
faluco@226
    46
	/* Release forwards */
faluco@226
    47
	g_Forwards.ReleaseForward(m_clconnect);
faluco@226
    48
	g_Forwards.ReleaseForward(m_clputinserver);
faluco@226
    49
	g_Forwards.ReleaseForward(m_cldisconnect);
faluco@226
    50
	g_Forwards.ReleaseForward(m_cldisconnect_post);
faluco@226
    51
	g_Forwards.ReleaseForward(m_clcommand);
faluco@226
    52
}
faluco@226
    53
faluco@226
    54
bool CPlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen)
faluco@226
    55
{
faluco@226
    56
	cell_t res = 1;
faluco@226
    57
faluco@226
    58
	m_clconnect->PushCell(engine->IndexOfEdict(pEntity));
faluco@226
    59
	m_clconnect->PushStringEx(reject, maxrejectlen, SM_PARAM_STRING_UTF8, SM_PARAM_COPYBACK);
faluco@226
    60
	m_clconnect->PushCell(maxrejectlen);
faluco@226
    61
	m_clconnect->Execute(&res, NULL);
faluco@226
    62
faluco@226
    63
	return (res) ? true : false;
faluco@226
    64
}
faluco@226
    65
faluco@226
    66
void CPlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername)
faluco@226
    67
{
faluco@226
    68
	cell_t res;
faluco@226
    69
faluco@226
    70
	m_clputinserver->PushCell(engine->IndexOfEdict(pEntity));
faluco@226
    71
	m_clputinserver->Execute(&res, NULL);
faluco@226
    72
}
faluco@226
    73
faluco@226
    74
void CPlayerManager::OnClientAuthorized()
faluco@226
    75
{
faluco@226
    76
	//:TODO:
faluco@226
    77
}
faluco@226
    78
faluco@226
    79
void CPlayerManager::OnClientDisconnect(edict_t *pEntity)
faluco@226
    80
{
faluco@226
    81
	cell_t res;
faluco@226
    82
faluco@226
    83
	m_cldisconnect->PushCell(engine->IndexOfEdict(pEntity));
faluco@226
    84
	m_cldisconnect->Execute(&res, NULL);
faluco@226
    85
}
faluco@226
    86
faluco@226
    87
void CPlayerManager::OnClientDisconnect_Post(edict_t *pEntity)
faluco@226
    88
{
faluco@226
    89
	cell_t res;
faluco@226
    90
faluco@226
    91
	m_cldisconnect_post->PushCell(engine->IndexOfEdict(pEntity));
faluco@226
    92
	m_cldisconnect_post->Execute(&res, NULL);
faluco@226
    93
}
faluco@226
    94
faluco@226
    95
void CPlayerManager::OnClientCommand(edict_t *pEntity)
faluco@226
    96
{
faluco@226
    97
	cell_t res;
faluco@226
    98
faluco@226
    99
	m_clcommand->PushCell(engine->IndexOfEdict(pEntity));
faluco@226
   100
	m_clcommand->Execute(&res, NULL);
faluco@226
   101
}