core/smn_usermsgs.cpp
changeset 598 991d7e247a2c
parent 593 507e74843261
child 600 f6d811158ad3
     1.1 --- a/core/smn_usermsgs.cpp	Sun Mar 11 19:26:47 2007 +0000
     1.2 +++ b/core/smn_usermsgs.cpp	Sun Mar 11 21:09:05 2007 +0000
     1.3 @@ -18,7 +18,11 @@
     1.4  #include "smn_usermsgs.h"
     1.5  
     1.6  HandleType_t g_WrBitBufType;
     1.7 +HandleType_t g_RdBitBufType;
     1.8  Handle_t g_CurMsgHandle;
     1.9 +Handle_t g_ReadBufHandle;
    1.10 +bf_read g_ReadBitBuf;
    1.11 +
    1.12  int g_MsgPlayers[256];
    1.13  bool g_IsMsgInExec = false;
    1.14  
    1.15 @@ -45,15 +49,30 @@
    1.16  
    1.17  void UsrMessageNatives::OnSourceModAllInitialized()
    1.18  {
    1.19 +	HandleAccess sec;
    1.20 +	sec.access[HandleAccess_Delete] |= HANDLE_RESTRICT_IDENTITY;
    1.21 +
    1.22  	g_WrBitBufType = g_HandleSys.CreateType("BitBufWriter", this, 0, NULL, NULL, g_pCoreIdent, NULL);
    1.23 +	g_RdBitBufType = g_HandleSys.CreateType("BitBufReader", this, 0, NULL, &sec, g_pCoreIdent, NULL);
    1.24 +
    1.25 +	g_ReadBufHandle = g_HandleSys.CreateHandle(g_RdBitBufType, &g_ReadBitBuf, NULL, g_pCoreIdent, NULL);
    1.26 +
    1.27  	g_PluginSys.AddPluginsListener(this);
    1.28  }
    1.29  
    1.30  void UsrMessageNatives::OnSourceModShutdown()
    1.31  {
    1.32 +	HandleSecurity sec;
    1.33 +	sec.pIdentity = g_pCoreIdent;
    1.34 +
    1.35 +	g_HandleSys.FreeHandle(g_ReadBufHandle, &sec);
    1.36 +
    1.37  	g_HandleSys.RemoveType(g_WrBitBufType, g_pCoreIdent);
    1.38 +	g_HandleSys.RemoveType(g_RdBitBufType, g_pCoreIdent);
    1.39 +
    1.40  	g_PluginSys.RemovePluginsListener(this);
    1.41  	g_WrBitBufType = 0;
    1.42 +	g_RdBitBufType = 0;
    1.43  }
    1.44  
    1.45  void UsrMessageNatives::OnHandleDestroy(HandleType_t type, void *object)
    1.46 @@ -221,8 +240,10 @@
    1.47  	cell_t res;
    1.48  	size_t size = _FillInPlayers(g_MsgPlayers, pFilter);
    1.49  
    1.50 +	g_ReadBitBuf.StartReading(bf->GetBasePointer(), bf->GetNumBytesWritten());
    1.51 +
    1.52  	m_Hook->PushCell(msg_id);
    1.53 -	m_Hook->PushCell(0); //:TODO: push handle!
    1.54 +	m_Hook->PushCell(g_ReadBufHandle);
    1.55  	m_Hook->PushArray(g_MsgPlayers, size);
    1.56  	m_Hook->PushCell(size);
    1.57  	m_Hook->PushCell(pFilter->IsReliable());
    1.58 @@ -235,8 +256,10 @@
    1.59  	cell_t res = static_cast<cell_t>(Pl_Continue);
    1.60  	size_t size = _FillInPlayers(g_MsgPlayers, pFilter);
    1.61  
    1.62 +	g_ReadBitBuf.StartReading(bf->GetBasePointer(), bf->GetNumBytesWritten());
    1.63 +
    1.64  	m_Intercept->PushCell(msg_id);
    1.65 -	m_Intercept->PushCell(0); //:TODO: push handle!
    1.66 +	m_Intercept->PushCell(g_ReadBufHandle);
    1.67  	m_Intercept->PushArray(g_MsgPlayers, size);
    1.68  	m_Intercept->PushCell(size);
    1.69  	m_Intercept->PushCell(pFilter->IsReliable());