implemented GetUserMessageName native

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40559
This commit is contained in:
Borja Ferrer 2007-03-01 23:44:27 +00:00
parent 7ebe3f33cd
commit 3b207f2cc9
3 changed files with 29 additions and 0 deletions

View File

@ -19,6 +19,8 @@ CUserMessages g_UserMsgs;
SH_DECL_HOOK2(IVEngineServer, UserMessageBegin, SH_NOATTRIB, 0, bf_write *, IRecipientFilter *, int);
SH_DECL_HOOK0_void(IVEngineServer, MessageEnd, SH_NOATTRIB, 0);
//:TODO: USE NEW MM IFACE TO SEARCH FOR MESSAGE NAMES ETC! faluco--> i'll do this when i have some spare time
CUserMessages::CUserMessages() : m_InterceptBuffer(m_pBase, 2500)
{
m_Names = sm_trie_create();
@ -71,6 +73,13 @@ int CUserMessages::GetMessageIndex(const char *msg)
return msgid;
}
bool CUserMessages::GetMessageName(int msgid, char *buffer, size_t maxlen) const
{
int dummy;
return gamedll->GetUserMessageInfo(msgid, buffer, maxlen, dummy);
}
bf_write *CUserMessages::StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags)
{
bf_write *buffer;

View File

@ -40,6 +40,7 @@ public: //SMGlobalClass
void OnSourceModAllShutdown();
public: //IUserMessages
int GetMessageIndex(const char *msg);
bool GetMessageName(int msgid, char *buffer, size_t maxlen) const;
bool HookUserMessage(int msg_id, IUserMessageListener *pListener, bool intercept=false);
bool UnhookUserMessage(int msg_id, IUserMessageListener *pListener, bool intercept=false);
bf_write *StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags);

View File

@ -52,6 +52,7 @@ void UsrMessageNatives::OnSourceModShutdown()
g_PluginSys.RemovePluginsListener(this);
g_WrBitBufType = 0;
}
void UsrMessageNatives::OnHandleDestroy(HandleType_t type, void *object)
{
}
@ -131,6 +132,7 @@ MsgListenerWrapper *UsrMessageNatives::FindListener(int msgid, IPluginContext *p
return (found) ? listener : NULL;
}
bool UsrMessageNatives::RemoveListener(IPluginContext *pCtx, MsgListenerWrapper *listener, bool intercept)
{
List<MsgListenerWrapper *> *wrapper_list;
@ -168,6 +170,21 @@ static cell_t smn_GetUserMessageId(IPluginContext *pCtx, const cell_t *params)
return g_UserMsgs.GetMessageIndex(msgname);
}
static cell_t smn_GetUserMessageName(IPluginContext *pCtx, const cell_t *params)
{
char *msgname;
pCtx->LocalToPhysAddr(params[2], (cell_t **)&msgname);
if (!g_UserMsgs.GetMessageName(params[1], msgname, params[3]))
{
msgname = "";
return 0;
}
return 1;
}
static cell_t smn_StartMessage(IPluginContext *pCtx, const cell_t *params)
{
char *msgname;
@ -269,6 +286,7 @@ static cell_t smn_HookUserMessage(IPluginContext *pCtx, const cell_t *params)
intercept = (params[3]) ? true : false;
listener = s_UsrMessageNatives.GetNewListener(pCtx);
listener->InitListener(msgid, pHook, pNotify, intercept);
g_UserMsgs.HookUserMessage(msgid, listener, intercept);
return 1;
@ -312,6 +330,7 @@ static cell_t smn_UnHookUserMessage(IPluginContext *pCtx, const cell_t *params)
REGISTER_NATIVES(usrmsgnatives)
{
{"GetUserMessageId", smn_GetUserMessageId},
{"GetUserMessageName", smn_GetUserMessageName},
{"StartMessage", smn_StartMessage},
{"StartMessageEx", smn_StartMessageEx},
{"EndMessage", smn_EndMessage},