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

# ui

> Цвет и всё, что связано с выводом текста на клиент

# ui

Цвет и всё, что связано с выводом текста на клиент.

Один и тот же цвет пишется одинаково во всех каналах, а канал берёт ближайшее,
что умеет нарисовать: HUD — как есть, [меню](../menu/index.md) — из четырёх
кодов, чат — из трёх тегов.

```lua theme={null}
p:hud(text, { color = "orange" })
menu.new("Оружие", { color = { title = "green" } })
```

## Теги цвета в чате

Внутри строки чата действует своя разметка — это не то же самое, что поле
`color`.

| тег                     | цвет                                                     |
| ----------------------- | -------------------------------------------------------- |
| `{default}`, `{yellow}` | обычный жёлто-белый                                      |
| `{green}`               | зелёный                                                  |
| `{team}`                | цвет команды: синий за CT, красный за T, серый у зрителя |

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

`{team}` берёт цвет от отправителя. По умолчанию отправитель — сам получатель,
поэтому каждый видит `{team}` в цвете своей команды; задаётся через `opts.from`
у [`p:chat`](../players/messages.md#chat).

<Note>
  Синий и красный доступны только через живого игрока из нужной команды: своего
  выбора цвета в протоколе чата нет.
</Note>

## Длина строки

Каждый канал заканчивается фиксированным буфером и обрезает лишнее молча.

| канал               | лимит, байт |
| ------------------- | ----------- |
| `chat`              | 188         |
| `dhud`              | 127         |
| `hud`               | 511         |
| `center`, `console` | 254         |

<Warning>
  `#s` не показывает реальную длину: тег `{green}` занимает 7 байт в Lua и 1 на
  проводе, кириллическая буква — 2 и 1 соответственно.
</Warning>

Считает `lib/text.lua`:

| вызов                    |                                      |
| ------------------------ | ------------------------------------ |
| `text.width(s)`          | сколько байт уйдёт на самом деле     |
| `text.fits(s, kind)`     | влезет ли                            |
| `text.clip(s, kind)`     | обрезать, не разорвав символ или тег |
| `text.expand(tpl, vars)` | подстановка `%name%`                 |
| `text.mmss(seconds)`     | `125` → `"2:05"`                     |

## Кириллица

`.lua` обычно лежат в UTF-8, и современный клиент CS 1.6 так их и рисует. По
умолчанию модуль ничего не конвертирует.

Старые клиенты ждут однобайтовый CP1251. Для них есть cvar `cslua_cp1251 1`: с
ним валидный UTF-8 переводится в CP1251, а строка, которая UTF-8 не является,
уходит нетронутой. Символы, которых в CP1251 нет, заменяются на `?`.

Конвертация касается только сообщений игрокам, включая текст меню. `print` пишет
в лог сервера как есть, всегда.

<h2 id="color">
  ui.color
</h2>

Разбирает цвет в `\{ r, g, b \}`.

```lua theme={null}
ui.color(value)
```

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

| # | имя     | тип             |                                               |
| - | ------- | --------------- | --------------------------------------------- |
| 1 | `value` | string \| table | имя из палитры, `"#rrggbb"` или `{ r, g, b }` |

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

| тип     |               |
| ------- | ------------- |
| `table` | `{ r, g, b }` |

### Пример

```lua theme={null}
local rgb = ui.color("orange")     --> { 255, 160, 0 }
ui.color("#ffa000")
ui.color({ 255, 160, 0 })
```

Нужен, когда цвет вычисляется, а не пишется руками. В поля `color` значение
можно передавать и без разбора — их читает сам модуль.

### Палитра

`ui.palette` — таблица `имя → { r, g, b }`.

| имя                      |                         |
| ------------------------ | ----------------------- |
| `white`, `black`, `grey` | `gray` — синоним `grey` |
| `red`, `green`, `blue`   |                         |
| `yellow`, `orange`       |                         |

<Warning>
  Неизвестное значение — ошибка со списком известных имён, а не
  тихий чёрный цвет.
</Warning>

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

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