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:
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#
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#
- Entity API reference — full class documentation
- Constants — Bone, HeroId
- World to Screen — projecting positions