CHandle is a C++ class that represents a 32-bit ID (entindex + serial number) unique to every past and present entity in a game. It is used to refer to entities where pointers and entity indexes are unsafe; mainly across the client/server divide and after restoring a saved game.
A CHandle is broadly similar to a pointer, but as it is a custom C++ class, and not a built-in feature, extra syntax is needed in some places:
- You must assign a pointer to the object, not the object itself.
Get()function, or a cast, is required access the class it is storing.
IsValid()is used to check whether a value is stored.
- To invalidate, call
CHandle is often used through the
EHANDLE typedef, which is shorthand for
CHandle<C_BaseEntity>. If you want to store a particular class it's better to declare a more specific CHandle manually (see previous section).
// Create a pointer to an entity CBasePlayer* pPlayer = gEntList.FindEntityByClassname( NULL, "player" ); // Store it (twice, for demonstration purposes) EHANDLE hPlayer = pPlayer; CHandle<CBasePlayer> hPlayer_ = pPlayer; // Convert the EHANDLE back to a CBasePlayer pointer pPlayer = dynamic_cast<CBasePlayer*>( hPlayer.Get() );