3636#include "eiface.h"
3737#include "public/game/server/iplayerinfo.h"
3838#include "utilities/baseentity.h"
39+ #include "toolframework/itoolentity.h"
3940
4041BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID (CBaseEntity )
4142
@@ -45,6 +46,7 @@ BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(CBaseEntity)
4546extern IVEngineServer * engine ;
4647extern CGlobalVars * gpGlobals ;
4748extern IPlayerInfoManager * playerinfomanager ;
49+ extern IServerTools * servertools ;
4850
4951
5052//-----------------------------------------------------------------------------
@@ -241,4 +243,72 @@ CREATE_EXC_CONVERSION_FUNCTION(CPointer, Pointer, CBaseEntity *, BaseEntity);
241243CREATE_EXC_CONVERSION_FUNCTION (CPointer , Pointer , unsigned int , Userid );
242244CREATE_EXC_CONVERSION_FUNCTION (CPointer , Pointer , IPlayerInfo * , PlayerInfo );
243245
246+
247+ //-----------------------------------------------------------------------------
248+ // Helper functions
249+ //-----------------------------------------------------------------------------
250+ inline bool IsValidBaseEntityPointer (void * ptr )
251+ {
252+ if (!ptr )
253+ return false;
254+
255+ CBaseEntity * pEntity = servertools -> FirstEntity ();
256+ while (pEntity ) {
257+ if (pEntity == ptr )
258+ return true;
259+
260+ pEntity = servertools -> NextEntity (pEntity );
261+ }
262+ return false;
263+ }
264+
265+ inline bool IsValidBaseEntityPointer (CPointer * pPtr )
266+ {
267+ return pPtr && IsValidBaseEntityPointer ((void * ) pPtr -> m_ulAddr );
268+ }
269+
270+ inline bool IsValidNetworkedEntityPointer (void * ptr )
271+ {
272+ if (!ptr )
273+ return false;
274+
275+ for (int i = 0 ; i < gpGlobals -> maxEntities ; ++ i )
276+ {
277+ edict_t * pEdict = NULL ;
278+ if (!EdictFromIndex (i , pEdict ))
279+ continue ;
280+
281+ if (pEdict -> GetUnknown ()-> GetBaseEntity () == ptr )
282+ return true;
283+ }
284+ return false;
285+ }
286+
287+ inline bool IsValidNetworkedEntityPointer (CPointer * pPtr )
288+ {
289+ return pPtr && IsValidNetworkedEntityPointer ((void * ) pPtr -> m_ulAddr );
290+ }
291+
292+ inline bool IsValidPlayerPointer (void * ptr )
293+ {
294+ if (!ptr )
295+ return false;
296+
297+ for (int i = 1 ; i < gpGlobals -> maxClients ; ++ i )
298+ {
299+ edict_t * pEdict = NULL ;
300+ if (!EdictFromIndex (i , pEdict ))
301+ continue ;
302+
303+ if (pEdict -> GetUnknown ()-> GetBaseEntity () == ptr )
304+ return true;
305+ }
306+ return false;
307+ }
308+
309+ inline bool IsValidPlayerPointer (CPointer * pPtr )
310+ {
311+ return pPtr && IsValidPlayerPointer ((void * ) pPtr -> m_ulAddr );
312+ }
313+
244314#endif // _CONVERSIONS_H
0 commit comments