Moderator elections are being held. See Valve Developer Community:Moderator elections for more details.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.
CHandle
Contents
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.
![Tip.png](/w/images/thumb/4/45/Tip.png/9px-Tip.png)
Restore()
!![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Usage
CHandle<YourStoredClass> hMyHandle;
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.
- The
CHandle
'sGet()
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
Term()
or assignINVALID_EHANDLE_INDEX
.
EHANDLE
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).
Example
// 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() );