Skip to content

Entities#

The entity system lets you query all players in the game — local player, teammates, and enemies.

Local Player#

Entity me = LocalPlayer();
Vector3 myPos = me.GetPosition();
Team myTeam = me.GetTeam();
uint64_t myHero = me.GetHeroId();

Iterating Players#

All Players#

Players() returns a range over every entity:

for (Entity player : Players())
{
    if (player.IsLocal()) continue;  // Skip yourself
    // ...
}

Enemies Only#

Use Players() with IsEnemy() to filter to enemies:

for (Entity player : Players())
{
    if (!player.IsAlive() || !player.IsEnemy()) continue;
    // Draw ESP...
}

Manual Iteration#

You can also iterate by index:

int count = GetPlayerCount();
for (int i = 0; i < count; i++)
{
    Entity e = GetPlayer(i);
    if (!e.IsValid()) continue;
    // ...
}

Entity Properties#

State Checks#

entity.IsValid()         // Has valid data
entity.IsAlive()         // Is alive
entity.IsVisible()       // Not behind a wall
entity.IsLocal()         // Is the local player
entity.IsEnemy()         // Different team from local player
entity.IsInvulnerable()  // Can't take damage

Identity#

entity.GetHeroId()       // Hero pool ID (compare with HeroId::)
entity.GetEntityType()   // Hero, Turret, Bot, etc.
entity.GetTeam()         // Red, Blue, Deathmatch, etc.

Health#

entity.GetHealth()        // Current HP
entity.GetHealthMax()     // Max HP
entity.GetHealthPercent() // 0-100

Position#

entity.GetPosition()      // Root (feet) position
entity.GetBonePos(boneId) // Any bone, e.g. Bone::Head (see Bone constants)
entity.GetDistance()       // Distance from local player

Targeting#

FindBestTarget returns the best enemy based on the host's targeting logic:

Entity target = FindBestTarget(0);
if (target)  // operator bool() checks IsValid()
{
    Vector2 screen;
    if (WorldToScreen(target.GetBonePos(Bone::Head), screen))
        Draw::CircleFilled(screen, 8.f, Color::Red());
}

Pass 0 for default targeting behavior.

Common Patterns#

ESP Loop#

extern "C" void on_render()
{
    for (Entity player : Players())
    {
        if (!player.IsAlive() || !player.IsEnemy()) continue;

        Vector2 screen;
        if (!WorldToScreen(player.GetBonePos(Bone::Head), screen))
            continue;

        Draw::CircleFilled(screen, 5.f,
            player.IsVisible() ? Color::Red() : Color::Orange());

        Draw::HealthBar(screen.x - 25, screen.y + 10, 50, 4,
                        player.GetHealthPercent());
    }
}

Distance Filter#

for (Entity player : Players())
{
    if (!player.IsAlive() || !player.IsEnemy()) continue;
    if (player.GetDistance() > g_maxDistance)
        continue;
    // ...
}

Hero Check#

for (Entity player : Players())
{
    if (!player.IsEnemy()) continue;
    if (player.GetHeroId() == HeroId::Widowmaker)
        Log("Watch out for Widowmaker!");
}

See Also#