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

# Слоты персонажей

> Больше персонажей — роли Discord, VIP-список или свои правила.

По умолчанию у всех несколько слотов (`Config.DefaultCharacterSlots`, с потолком `Config.MaxCharacters`). Если хватает — эту страницу можно пропустить.

Хотите, чтобы у supporters, staff или конкретных игроков было больше? Всё настраивается в `rco-creator/config/server.lua` на сервере — игроки этот файл не видят.

## Как Creator выбирает число (прочитайте сначала)

Когда кто-то открывает выбор персонажа, Creator спрашивает **в таком порядке** и останавливается на первом ответе:

1. **Ваша функция** — если `ResolveCustomSlots` вернула число
2. **Роли Discord** — только когда интеграция Discord включена
3. **Ручной список по license** — `PlayerSlots`, но **только когда Discord выключен**
4. **Лимит фреймворка** — что сообщает RSG/VORP
5. **По умолчанию** — `Config.DefaultCharacterSlots`

Что бы ни победило — зажимается между **1** и **`Config.MaxCharacters`**.

<Warning>
  **Три частые путаницы:**

  1. Числа — это **всего слотов**, а не «базовые + бонус». VIP = 5 значит **пять персонажей всего**, а не четыре плюс один.
  2. **Discord включён = `PlayerSlots` игнорируется.** Нужны оба? Обрабатывайте в `ResolveCustomSlots`.
  3. **Несколько ролей Discord не складываются.** Creator берёт только **самую высокую** подходящую роль.
</Warning>

## Дополнительные слоты одному игроку (без Discord)

Сопоставьте license с общим числом слотов:

```lua theme={"dark"}
CreatorServerConfig.PlayerSlots = {
    ['license:1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b'] = 5,
}
```

License смотрите в админ-инструментах или консоли сервера при подключении.

## Роли Discord

Привяжите слоты к ролям в Discord-сервере сообщества. Нужны бот и ID в `server.lua`.

**Первый раз?** Пошагово: [Настройка ролей Discord](/ru/rco-creator/discord-roles-setup).

```lua theme={"dark"}
CreatorServerConfig.Discord = {
    enabled = true,
    guildId = '123456789012345678',
    botToken = 'YOUR_BOT_TOKEN',
    defaultSlots = 1,
    cacheSeconds = 600,
    timeoutMs = 8000,
    roleSlots = {
        ['ROLE_ID_SUPPORTER'] = 3,
        ['ROLE_ID_VIP'] = 5,
    },
}
```

Supporter (3) + VIP (5) вместе = **5**, не 8. Без привязанного Discord = `defaultSlots`.

<Warning>
  Токен бота = пароль. Никогда в Discord, тикетах или публичных репозиториях. `server.lua` только на игровом сервере.
</Warning>

Discord включён, но пустые `guildId` или `botToken` → Creator **не запустится**.

## Свои правила (Tebex, база, whitelist)

Используйте шаг 1 — верните число или `nil`, чтобы передать дальше:

```lua theme={"dark"}
CreatorServerConfig.ResolveCustomSlots = function(source, identifiers)
    -- identifiers.license, identifiers.discord доступны
    if identifiers.license == 'license:...' then
        return 5
    end
    return nil
end
```

Если функция падает с ошибкой, выбор не откроется для этого игрока — держите её простой.

## Заблокированные слоты на экране выбора

Дополнительные слоты, которые игрок ещё не открыл, показываются бледными силуэтами. Скрыть их: `Config.Selection.hideLockedSlotGhosts = true`.
