# Библиотека *rules*

```lua
rules.create(
    -- имя правила
    name: str,
    -- значение по-умолчанию
    default: bool,
    -- функция-обработчик изменения значения
    [опционально] handler: function
) -> int
```

Создаёт правило. Если указан обработчик, возвращает id для возможности удаления.

> [!NOTE]
> Созданием правила считается вызов rules.create с назначением значения по-умолчанию.
> Не созданные правила могут быть использованы, но сброс через rules.reset приведёт
> к установке значения nil.

```lua
rules.listen(
    -- имя правила
    name: str,
    -- функция-обработчик изменения значения
    handler: function
) -> int
```

Добавляет обработчик изменения значения правила. 
Возвращает id для возможности удаления.
Также позволяет подписаться на правило до его создания.

```lua
rules.unlisten(name: str, id: int)
```

Удаляет обработчик правила по id, если он существует.

```lua
rules.get(name: str) -> bool | nil
```

Возвращает значение правила или nil, если оно ещё не было создано.

```lua
rules.set(name: str, value: bool)
```

Устанавливает значение правила, вызывая обработчики. Может использоваться и
до создания правила.

```lua
rules.reset(name: str)
```

Сбрасывает значение правила к значению по-умолчанию.


## Стандартные правила


| Имя                    | Описание                                                        | По-умолчанию |
| ---------------------- | --------------------------------------------------------------- | ------------ |
| cheat-commands         | Разрешить команды, имена которых есть в массиве console.cheats. | true         |
| allow-content-access   | Разрешить панель доступа к контенту.                            | true         |
| allow-flight           | Разрешить полёт                                                 | true         |
| allow-noclip           | Разрешить включение noclip.                                     | true         |
| allow-attack           | Разрешить атаковать сущности.                                   | true         |
| allow-destroy          | Разрешить разрушение блоков.                                    | true         |
| allow-cheat-movement   | Разрешить специальные клавиши быстрого перемещения.             | true         |
| allow-debug-cheats     | Разрешить нечестные элементы управления на дебаг-панели.        | true         |
| allow-fast-interaction | Разрешить быстрое взаимодействие.                               | true         |
