1.1 --- a/extensions/sdktools/trnatives.cpp Tue Jan 22 17:04:59 2008 +0000
1.2 +++ b/extensions/sdktools/trnatives.cpp Tue Jan 22 17:18:15 2008 +0000
1.3 @@ -41,16 +41,19 @@
1.4 edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(pEntity));
1.5 m_pFunc->PushCell(engine->IndexOfEdict(pEdict));
1.6 m_pFunc->PushCell(contentsMask);
1.7 + m_pFunc->PushCell(m_Data);
1.8 m_pFunc->Execute(&res);
1.9
1.10 return (res) ? true : false;
1.11 }
1.12 - void SetFunctionPtr(IPluginFunction *pFunc)
1.13 + void SetFunctionPtr(IPluginFunction *pFunc, cell_t data)
1.14 {
1.15 m_pFunc = pFunc;
1.16 + m_Data = data;
1.17 }
1.18 private:
1.19 IPluginFunction *m_pFunc;
1.20 + cell_t m_Data;
1.21 };
1.22
1.23 /* Used for the global trace version */
1.24 @@ -105,13 +108,24 @@
1.25 {
1.26 cell_t *startaddr, *endaddr;
1.27 IPluginFunction *pFunc;
1.28 + cell_t data;
1.29
1.30 pFunc = pContext->GetFunctionById(params[5]);
1.31 if (!pFunc)
1.32 {
1.33 return pContext->ThrowNativeError("Invalid function id (%X)", params[5]);
1.34 }
1.35 - g_SMTraceFilter.SetFunctionPtr(pFunc);
1.36 +
1.37 + if (params[0] >= 6)
1.38 + {
1.39 + data = params[6];
1.40 + }
1.41 + else
1.42 + {
1.43 + data = 0;
1.44 + }
1.45 +
1.46 + g_SMTraceFilter.SetFunctionPtr(pFunc, data);
1.47 pContext->LocalToPhysAddr(params[1], &startaddr);
1.48 pContext->LocalToPhysAddr(params[2], &endaddr);
1.49
1.50 @@ -192,6 +206,7 @@
1.51 {
1.52 IPluginFunction *pFunc;
1.53 cell_t *startaddr, *endaddr;
1.54 + cell_t data;
1.55
1.56 pFunc = pContext->GetFunctionById(params[5]);
1.57 if (!pFunc)
1.58 @@ -205,7 +220,16 @@
1.59 CSMTraceFilter smfilter;
1.60 Ray_t ray;
1.61
1.62 - smfilter.SetFunctionPtr(pFunc);
1.63 + if (params[0] >= 6)
1.64 + {
1.65 + data = params[6];
1.66 + }
1.67 + else
1.68 + {
1.69 + data = 0;
1.70 + }
1.71 +
1.72 + smfilter.SetFunctionPtr(pFunc, data);
1.73 StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2]));
1.74
1.75 switch (params[4])