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

# menu

> Меню на клавишах 1–9 и 0

# menu

Меню на клавишах 1–9 и 0.

```lua theme={null}
local m = menu.new("Выбери оружие")
m:add("AK-47", function(p) p:give("weapon_ak47") end)
m:add("AWP",   function(p) p:give("weapon_awp") end)
m:show(p)
```

На странице до 8 пунктов, дальше меню разбивается само: `9` — вперёд, `0` —
назад, на первой странице `0` — выход.

Ответ игрока перехватывается до игры, поэтому нажатая клавиша не улетает в меню
покупки. Устаревший ответ и клавиша, которой в меню нет, игнорируются.

## Цвета

Панель умеет четыре цвета. Задаются как везде — именем из палитры, `"#rrggbb"`
или `{ r, g, b }`; берётся ближайший из четырёх. Сырой код AMX Mod X (`"\r"`)
тоже принимается.

| ключ       | что красит                                               |
| ---------- | -------------------------------------------------------- |
| `title`    | заголовок                                                |
| `number`   | номера пунктов                                           |
| `text`     | текст пунктов                                            |
| `nav`      | номера `Next`, `Back`, `Exit`; по умолчанию как `number` |
| `disabled` | пункт целиком при `disabled = true`, по умолчанию серый  |

Код цвета действует до следующего и переносится через строки, поэтому рендер
ставит коды только там, где цвет меняется: меню без `color` уходит на клиент
байт в байт таким же, как раньше.

<h2 id="new">
  menu.new
</h2>

Создаёт меню.

```lua theme={null}
menu.new([title[, opts]])
```

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

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

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

| тип    |             |
| ------ | ----------- |
| `menu` | объект меню |

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

| поле      | тип             |                                                       |
| --------- | --------------- | ----------------------------------------------------- |
| `exit`    | boolean         | клавиша `0` закрывает меню; по умолчанию `true`       |
| `time`    | number          | секунд на экране; `-1` — до ответа. По умолчанию `-1` |
| `on_exit` | function        | вызывается при закрытии, получает игрока              |
| `color`   | string \| table | см. [Цвета](index.md#цвета)                           |

### Пример

```lua theme={null}
local m = menu.new("Оружие", { color = { title = "yellow", number = "red" } })
```

<h2 id="add">
  m:add
</h2>

Добавляет пункт.

```lua theme={null}
m:add(text[, fn][, opts])
```

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

| # | имя    | тип             |                           |
| - | ------ | --------------- | ------------------------- |
| 1 | `text` | string          | текст пункта              |
| 2 | `fn`   | function \| nil | получает `(player, item)` |
| 3 | `opts` | table \| nil    | см. [Опции](#add-опции)   |

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

| тип     |                                        |
| ------- | -------------------------------------- |
| `table` | пункт — на него можно вешать свои поля |

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

| поле       | тип             |                                                 |
| ---------- | --------------- | ----------------------------------------------- |
| `disabled` | boolean         | видно, нажать нельзя                            |
| `value`    | any             | своё значение на пункте                         |
| `color`    | string \| table | цвет пункта целиком или `{ number = , text = }` |

### Пример

```lua theme={null}
m:add("AWP", function(p, item)
	p:give("weapon_awp")
end, { color = "red", value = 4750 })

m:add("Пока недоступно", nil, { disabled = true })
```

<h2 id="show">
  m:show
</h2>

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

```lua theme={null}
m:show(p[, page])
```

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

| # | имя    | тип           |                                      |
| - | ------ | ------------- | ------------------------------------ |
| 1 | `p`    | player        | кому показать                        |
| 2 | `page` | number \| nil | страница с нуля; по умолчанию первая |

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

Ничего.

<h2 id="close">
  m:close
</h2>

Убирает меню с экрана игрока.

```lua theme={null}
m:close(p)
```

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

| # | имя | тип    |               |
| - | --- | ------ | ------------- |
| 1 | `p` | player | у кого убрать |

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

Ничего.

<h2 id="count">
  m:count
</h2>

Количество пунктов.

```lua theme={null}
m:count()
```

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

| тип      |                           |
| -------- | ------------------------- |
| `number` | сколько пунктов добавлено |

<h2 id="color">
  m:color
</h2>

Перекрашивает меню целиком.

```lua theme={null}
m:color(spec)
```

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

| # | имя    | тип             |                                 |
| - | ------ | --------------- | ------------------------------- |
| 1 | `spec` | string \| table | тот же формат, что `opts.color` |

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

| тип    |                         |
| ------ | ----------------------- |
| `menu` | сам объект, для цепочки |

Работает до `m:show()`.

<h2 id="item_color">
  m:item\_color
</h2>

Перекрашивает один пункт.

```lua theme={null}
m:item_color(item, spec)
```

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

| # | имя    | тип             |                        |
| - | ------ | --------------- | ---------------------- |
| 1 | `item` | table           | то, что вернул `m:add` |
| 2 | `spec` | string \| table | цвет                   |

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

| тип     |              |
| ------- | ------------ |
| `table` | тот же пункт |

### Пример

```lua theme={null}
m:item_color(m.items[1], "grey")
```
