CHandle
CHandle ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede entfernte und neu erstellte Entity im Spiel darstellt. Es wird verwendet, um auf Entities zu verweisen, wo Pointer und Entity Indizes unsicher sind; hauptsächlich über die Client-/Server-Kluft und nach dem Laden eines Spielstandes.
Restore() neu definieren!Gebrauch
CHandle<YourStoredClass> hMyHandle;
Ein CHandle ist den Pointern sehr ähnlich, aber weil es eine maßgeschneiderte C++ Klasse ist und kein built-in Feature, ist eine besondere Syntax an manchen Stellen notwendig:
- Man muss einen Pointer zum Objekt anbinden, nicht das Objekt selbst.
 - Des 
CHandlesGet()Funktion oder ein Cast ist erforderlich, um auf die gespeicherte Klasse zuzugreifen. IsValid()wird benutzt, um zu überprüfen, ob ein Wert gespeichert wird.- Um ein 
CHandleungültig zu machen, mussTerm()aufgerufen oderINVALID_EHANDLE_INDEXzugeordnet werden. 
EHANDLE
CHandle wird häufig durch das EHANDLE typedef benutzt, welches die Kurzform für CHandle<C_BaseEntity> ist. Wenn man eine bestimmte Klasse speichern will, ist es besser, einen spezifischeren CHandle manuell zu deklarieren (siehe vorheriger Abschnitt).
Beispiel
// Erzeuge einen Pointer auf eine Entity
CBasePlayer* pPlayer = gEntList.FindEntityByClassname( NULL, "player" );
 
// speichere es (zwei Mal, zu Demonstrationszwecken)
EHANDLE hPlayer = pPlayer;
CHandle<CBasePlayer> hPlayer_ = pPlayer;
 
// konvertiere das EHANDLE zurück in einen CBasePlayer-Pointer
pPlayer = dynamic_cast<CBasePlayer*>( hPlayer.Get() );