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());