View Single Post
Re: Safe to keep edict_t pointers ?
Old
  (#2)
Rick
Council Member
 
Rick's Avatar
 
Status: Offline
Posts: 690
Join Date: Dec 2003
Location: Holland
Default Re: Safe to keep edict_t pointers ? - 02-02-2005

Sure as long as you check if their still valid(ie not kicked or removed):
Code:
bool IsNull (edict_t *pEdict) 
{ 
	// thanx to PMB for this function 
	try 
	{ 
		if (pEdict == NULL) 
			return true; 
 
		if (g_engfuncs.pfnEntOffsetOfPEntity (pEdict) == 0) 
			return true; 
    
		if (pEdict->free) 
			return true; 
 
		if (pEdict->v.flags & FL_KILLME) 
			return true; 
   } 
   catch (...) 
   { 
#ifdef _DEBUG 
		FILE *fp = fopen("bot.txt", "a"); 
		if(fp) 
		{ 
			fprintf(fp, "IsNull(edict_t *) Error\n"); 
			fclose(fp); 
		} 
#endif 
	   return true; // failed so assuming entity isn't valid... 
   } 
 
   return false; 
}
and for players/bots specific

Code:
// Check if a player is valid 
// CheckAlive(default true): check if this player is alive, if not return false 
// CheckObserver(default true): If observer mode on and if this player is NOT a bot return false 
bool UTIL_IsValidPlayer(CBasePlayer *pPlayer, bool CheckAlive, bool CheckObserver) 
{ 
	if (!pPlayer || !pPlayer->pev) 
		return false; 
 
	if (IsNull(pPlayer)) 
		return false; 
	 
	if ((CheckObserver) && (BotManager.ObserverMode()) && (!UTIL_IsBot(pPlayer))) 
		return false; 
 
	if (FStrEq(STRING(pPlayer->pev->netname),"")) 
		return false; 
 
	if ((CheckAlive) && ((!pPlayer->IsAlive()) || (pPlayer->m_fObserverFlag))) 
		return false; 
 
	if (!(pPlayer->pev->flags & FL_CLIENT)) 
		return false; 
 
	return true; 
}
  
Reply With Quote