> ## 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.

# players — Сообщения

> Те же методы есть у [`players.broadcast`](namespace.md#broadcast)

# Сообщения

Те же методы есть у [`players.broadcast`](namespace.md#broadcast).

<h2 id="chat">
  p:chat
</h2>

Отправляет строку в чат.

```lua theme={null}
p:chat(text[, opts])
```

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

| # | имя    | тип          |                            |
| - | ------ | ------------ | -------------------------- |
| 1 | `text` | string       | текст; понимает теги цвета |
| 2 | `opts` | table \| nil | см. [Опции](#chat-опции)   |

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

Ничего.

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

| поле   | тип    |                                     |
| ------ | ------ | ----------------------------------- |
| `from` | player | чей цвет команды подставит `{team}` |

### Пример

```lua theme={null}
p:chat("{green}[Server]{default} Привет, {team}" .. p:name())
```

Теги цвета — в [`ui`](../ui/index.md#color). Лимит строки — 188 байт.

<h2 id="console">
  p:console
</h2>

Пишет строку в консоль игрока.

```lua theme={null}
p:console(text)
```

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

| # | имя    | тип    |             |
| - | ------ | ------ | ----------- |
| 1 | `text` | string | до 254 байт |

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

Ничего.

<h2 id="center">
  p:center
</h2>

Показывает текст по центру экрана.

```lua theme={null}
p:center(text)
```

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

| # | имя    | тип    |             |
| - | ------ | ------ | ----------- |
| 1 | `text` | string | до 254 байт |

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

Ничего.

<h2 id="hud">
  p:hud
</h2>

Рисует текст на HUD с позицией, цветом и таймингами.

```lua theme={null}
p:hud(text[, opts])
```

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

| # | имя    | тип          |                         |
| - | ------ | ------------ | ----------------------- |
| 1 | `text` | string       | до 511 байт             |
| 2 | `opts` | table \| nil | см. [Опции](#hud-опции) |

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

Ничего.

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

| поле      | тип             |                                                               |
| --------- | --------------- | ------------------------------------------------------------- |
| `x, y`    | number          | позиция 0..1; `-1` — по центру оси. По умолчанию `-1`, `0.35` |
| `color`   | string \| table | имя, `"#rrggbb"` или `{ r, g, b[, a] }`                       |
| `color2`  | string \| table | вторая точка градиента для `effect = 2`                       |
| `effect`  | number          | `0` fade, `1` flicker, `2` typewriter                         |
| `fadein`  | number          | по умолчанию `0.1`                                            |
| `fadeout` | number          | по умолчанию `0.2`                                            |
| `hold`    | number          | секунд на экране, по умолчанию `5`                            |
| `fxtime`  | number          | по умолчанию `0.25`                                           |
| `channel` | number          | `0..3`, разные каналы не затирают друг друга                  |

### Пример

```lua theme={null}
p:hud("Раунд начался", { y = 0.3, color = "green", hold = 3 })
```

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

* [ui.color](../ui/index.md#color)

<h2 id="dhud">
  p:dhud
</h2>

То же через `SVC_DIRECTOR` — directed HUD.

```lua theme={null}
p:dhud(text[, opts])
```

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

| # | имя    | тип          |                                                              |
| - | ------ | ------------ | ------------------------------------------------------------ |
| 1 | `text` | string       | до 127 байт                                                  |
| 2 | `opts` | table \| nil | как у [`p:hud`](messages.md#hud), кроме `channel` и `color2` |

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

Ничего.

Держит до 8 сообщений одновременно.

<h2 id="screen_shake">
  p:screen\_shake
</h2>

Трясёт экран игрока.

```lua theme={null}
p:screen_shake([opts])
```

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

| # | имя    | тип          |                                  |
| - | ------ | ------------ | -------------------------------- |
| 1 | `opts` | table \| nil | см. [Опции](#screen_shake-опции) |

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

Ничего.

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

| поле        | тип    |                                      |
| ----------- | ------ | ------------------------------------ |
| `amplitude` | number | сила тряски; по умолчанию `16`       |
| `frequency` | number | частота дрожания; по умолчанию `150` |
| `duration`  | number | секунд; по умолчанию `1.0`           |

### Пример

```lua theme={null}
p:screen_shake({ amplitude = 24, duration = 1.5 })
```

<h2 id="screen_fade">
  p:screen\_fade
</h2>

Заливает экран игрока цветом с угасанием.

```lua theme={null}
p:screen_fade([opts])
```

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

| # | имя    | тип          |                                 |
| - | ------ | ------------ | ------------------------------- |
| 1 | `opts` | table \| nil | см. [Опции](#screen_fade-опции) |

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

Ничего.

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

| поле       | тип             |                                                                                           |
| ---------- | --------------- | ----------------------------------------------------------------------------------------- |
| `color`    | string \| table | имя, `"#rrggbb"` или `{ r, g, b[, a] }`; по умолчанию чёрный                              |
| `alpha`    | number          | `0..255`, по умолчанию `200`; перекрывает 4-й компонент `color`                           |
| `duration` | number          | секунд на угасание, по умолчанию `1.0`                                                    |
| `hold`     | number          | секунд держать перед угасанием, по умолчанию `0`                                          |
| `out`      | boolean         | `true` — экран чистый и заливается цветом; по умолчанию `false` — экран залит и очищается |
| `modulate` | boolean         | смешивать вместо сплошной заливки                                                         |
| `stay`     | boolean         | держать залитым до следующего `screen_fade`, игнорируя `duration`                         |

### Пример

```lua theme={null}
-- вспышка урона
p:screen_fade({ color = "red", alpha = 120, duration = 0.5 })

-- затемнение на весь экран, которое держится, пока не снимут
p:screen_fade({ color = "black", alpha = 255, out = true, stay = true })
```

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

* [ui.color](../ui/index.md#color)

<h2 id="motd">
  p:motd
</h2>

Открывает игроку панель MOTD.

```lua theme={null}
p:motd(text[, opts])
```

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

| # | имя    | тип          |                            |
| - | ------ | ------------ | -------------------------- |
| 1 | `text` | string       | до 1536 байт после обёртки |
| 2 | `opts` | table \| nil | см. [Опции](#motd-опции)   |

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

Ничего.

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

| поле  | тип     |                                       |
| ----- | ------- | ------------------------------------- |
| `raw` | boolean | слать как есть, разметку пишет плагин |

### Пример

```lua theme={null}
p:motd(table.concat(lines, "\n"))

p:motd([[<meta charset="utf-8">
<body style="background:#111;color:#ddd">
  <h3>Магазин</h3>
  <table><tr><td>AK-47</td><td>2500</td></tr></table>
</body>]], { raw = true })
```

Единственная многострочная поверхность в игре: меню — это девять клавиш, а HUD —
одна строка. Каталог магазина, топ-10 и правила сервера показывают здесь.

### Панель — это HTML

У клиентов, которые ещё запускают, MOTD рисует HTML-вьюха, а не текстовое поле.
Из этого следуют две вещи, знать которые вызывающему незачем, поэтому по
умолчанию модуль разбирается с ними сам:

|                |                                                                                                                              |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| перевод строки | в HTML это пробел, поэтому `\n` заменяется на `<br>`                                                                         |
| кодировка      | без объявления движок читает UTF-8 как системную кодовую страницу и показывает мусор, поэтому в начало идёт `<meta charset>` |
| `<`, `>`, `&`  | экранируются: ник с угловой скобкой не должен становиться разметкой                                                          |
| шрифт          | моноширинный — в панели показывают таблицы цен и топы, пропорциональный их разъезжает                                        |

`raw = true` отключает всю обёртку: текст уходит байт в байт, `<meta charset>`
пишешь сам. Это режим для оформления — фон, цвета, таблицы.

Текст уходит кусками по 60 байт, клиент собирает их обратно; снаружи это один
вызов.

<Note>
  Заголовок самого окна задаёт клиент: в протоколе поля для него
  нет.
</Note>

<Warning>
  Длиннее 1536 байт обрезается, и считается это уже вместе с
  обёрткой. При `cslua_cp1251 1` кириллица занимает вдвое меньше,
  чем в UTF-8.
</Warning>

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

* [p:center](messages.md#center)
* [menu.new](../menu/index.md#new)

<h2 id="play_sound">
  p:play\_sound
</h2>

Проигрывает игроку звук.

```lua theme={null}
p:play_sound(path[, opts])
```

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

| # | имя    | тип          |                                                     |
| - | ------ | ------------ | --------------------------------------------------- |
| 1 | `path` | string       | путь от `cstrike/sound/`, обязан быть предкэширован |
| 2 | `opts` | table \| nil | см. [Опции](#play_sound-опции)                      |

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

Ничего.

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

| поле          | тип    |                                                                           |
| ------------- | ------ | ------------------------------------------------------------------------- |
| `volume`      | number | 0..1, по умолчанию `1.0`                                                  |
| `attenuation` | number | затухание с расстоянием; `0` — одинаково слышно везде. По умолчанию `0.8` |
| `channel`     | number | канал звука, по умолчанию `0`                                             |
| `pitch`       | number | тон, по умолчанию `100`                                                   |

### Пример

```lua theme={null}
p:play_sound("items/9mmclip1.wav", { attenuation = 0 })
```

Это `EMIT_SOUND`, движковый вызов уровня всего сервера: он эмитится из этого игрока как из точки в мире, и слышит его любой, чей PAS накрывает эту точку — не обязательно только `p`. `attenuation = 0` не делает звук приватным, только одинаково громким всем, кто его услышал. Для звука, который должен услышать ровно этот игрок и никто больше, используй [`p:exec`](admin.md#exec) с консольной командой `spk`: `p:exec('spk "путь/без/точки/wav"')` — это настоящая адресная команда клиенту, а не излучение в мир.

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

* [res.sound](../res/index.md#sound)
* [p:exec](admin.md#exec)
