> ## Documentation Index
> Fetch the complete documentation index at: https://cs-lua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ents — Пространство имён

> Сущности: дропы, точки интереса, зоны, маркеры

# Пространство имён

<h2 id="create">
  ents.create
</h2>

Создаёт сущность по classname.

```lua theme={null}
ents.create(classname)
```

### Аргументы

| # | имя         | тип    |                               |
| - | ----------- | ------ | ----------------------------- |
| 1 | `classname` | string | `info_target`, `func_door`, … |

### Возвращает

| тип             |                                       |
| --------------- | ------------------------------------- |
| `entity \| nil` | новая сущность                        |
| `string`        | причина, если игра не знает classname |

### Пример

```lua theme={null}
hook.add("round:start", "drops.spawn", function()
	local e = ents.create("info_target")
	e:model("models/w_ak47.mdl")
	e:origin(x, y, z)
	e:spawn()
end)
```

Возвращает голый edict: игра ещё не превратила его ни во что. Сначала модель и
позиция, потом [`e:spawn()`](entity.md#spawn) — `Spawn` читает уже выставленные поля. В
обратном порядке получится сущность, которую игра игнорирует.

Модель обязана быть предкэширована через [`res.model`](../res/index.md#model), а это
делается в теле плагина.

<Warning>
  Пока карта не загружена, сущностей не существует. Тело плагина
  выполняется задолго до неё, и здесь это ошибка. Создавай сущности
  из события: `round_start`, `player_spawn`, таймер, команда.
</Warning>

<h2 id="find">
  ents.find
</h2>

Находит все сущности с заданным classname.

```lua theme={null}
ents.find(classname)
```

### Аргументы

| # | имя         | тип    |            |
| - | ----------- | ------ | ---------- |
| 1 | `classname` | string | что искать |

### Возвращает

| тип     |                                          |
| ------- | ---------------------------------------- |
| `table` | массив сущностей, пустой если ничего нет |

<Warning>
  Пока карта не загружена, сущностей не существует. Тело плагина
  выполняется задолго до неё, и здесь это ошибка. Создавай сущности
  из события: `round_start`, `player_spawn`, таймер, команда.
</Warning>

<h2 id="in_sphere">
  ents.in\_sphere
</h2>

Находит все сущности в радиусе от точки.

```lua theme={null}
ents.in_sphere(x, y, z, radius)
```

### Аргументы

| # | имя       | тип    |                 |
| - | --------- | ------ | --------------- |
| 1 | `x, y, z` | number | центр           |
| 2 | `radius`  | number | радиус в юнитах |

### Возвращает

| тип     |                                        |
| ------- | -------------------------------------- |
| `table` | массив сущностей, порядок произвольный |

Из этого делается зона: объём без собственной сущности-триггера.

<Warning>
  Пока карта не загружена, сущностей не существует. Тело плагина
  выполняется задолго до неё, и здесь это ошибка. Создавай сущности
  из события: `round_start`, `player_spawn`, таймер, команда.
</Warning>

<h2 id="trace_line">
  ents.trace\_line
</h2>

Пускает луч между двумя произвольными точками.

```lua theme={null}
ents.trace_line(a, b[, opts])
```

### Аргументы

| # | имя    | тип          |                           |
| - | ------ | ------------ | ------------------------- |
| 1 | `a`    | table        | точка старта, `{x, y, z}` |
| 2 | `b`    | table        | точка конца, `{x, y, z}`  |
| 3 | `opts` | table \| nil | см. Опции ниже            |

### Возвращает

| тип     |                                                                                    |
| ------- | ---------------------------------------------------------------------------------- |
| `table` | что попалось — тот же формат, что у [p:trace](../players/state.md#trace-результат) |

<h3 id="trace_line-опции">
  Опции
</h3>

| поле              | тип                     |                                          |
| ----------------- | ----------------------- | ---------------------------------------- |
| `skip`            | entity \| player \| nil | луч эту сущность игнорирует              |
| `ignore_monsters` | boolean                 | `true` — луч летит сквозь монстров/ботов |

### Пример

```lua theme={null}
local a = { 0, 0, 0 }
local b = { 100, 0, 0 }
local t = ents.trace_line(a, b)
if t.kind ~= "none" then
	print(t.classname, t.distance)
end
```

В отличие от [`p:trace`](../players/state.md#trace) — который стреляет из
глаз игрока — здесь оба конца луча произвольные: ничьи глаза не нужны.
Годится для эффектов, самодельных снарядов, проверки прямой видимости между
двумя сущностями.

<Warning>
  Пока карта не загружена, сущностей не существует. Тело плагина
  выполняется задолго до неё, и здесь это ошибка. Создавай сущности
  из события: `round_start`, `player_spawn`, таймер, команда.
</Warning>

### Смотри также

* [ents.trace\_hull](namespace.md#trace_hull)
* [p:trace](../players/state.md#trace)
* [p:trace\_to](../players/state.md#trace_to)

<h2 id="trace_hull">
  ents.trace\_hull
</h2>

То же самое, что `ents.trace_line`, но толкает объём, а не бесконечно тонкий луч.

```lua theme={null}
ents.trace_hull(a, b[, opts])
```

### Аргументы

| # | имя    | тип          |                                      |
| - | ------ | ------------ | ------------------------------------ |
| 1 | `a`    | table        | точка старта, `{x, y, z}`            |
| 2 | `b`    | table        | точка конца, `{x, y, z}`             |
| 3 | `opts` | table \| nil | опции `ents.trace_line`, плюс `hull` |

### Возвращает

| тип     |                                                                                    |
| ------- | ---------------------------------------------------------------------------------- |
| `table` | что попалось — тот же формат, что у [p:trace](../players/state.md#trace-результат) |

<h3 id="trace_hull-опция-hull">
  Опция hull
</h3>

| поле | тип    |                                       |
| ---- | ------ | ------------------------------------- |
| `0`  | number | точка — то же самое, что `trace_line` |
| `1`  | number | стоящий игрок (по умолчанию)          |
| `2`  | number | крупный объём                         |
| `3`  | number | голова, для приседа                   |

### Пример

```lua theme={null}
local t = ents.trace_hull({ 0, 0, 0 }, { 0, 0, -100 }, { hull = 1 })
```

Тем же движковым вызовом (`TRACE_HULL`) пользуется `sv.hull_free` — только
там объём нулевой длины и результат сведён к да/нет; здесь — полный трейс
вдоль пути.

<Warning>
  Пока карта не загружена, сущностей не существует. Тело плагина
  выполняется задолго до неё, и здесь это ошибка. Создавай сущности
  из события: `round_start`, `player_spawn`, таймер, команда.
</Warning>

### Смотри также

* [ents.trace\_line](namespace.md#trace_line)
