Treasures (Сундуки с вероятностями)
Treasures (Сундуки с вероятностями)
Общее описание
Treasures (Сундуки) — это механизм лояльности, позволяющий пользователям получать случайные призы (rewards) согласно заданным вероятностям.
Основные возможности:
- Администраторы создают различные сундуки
- Наполняют их призами с настройкой вероятностей выпадения
- Персонализируют сундуки для конкретных клиентов
- Используют разные алгоритмы выдачи наград
Сценарий работы
- Создание сундука – Администратор создает сундук в системе лояльности
- Создание Item – Администратор создает item с
type = Treasureи указываетtreasure_idсозданного сундука - Наполнение призами – Сундук наполняется наградами (rewards)
- Настройка вероятностей – Каждому призу назначается вероятность выпадения
- Открытие сундука – Пользователь открывает сундук и получает случайный приз согласно выбранному алгоритму выдачи
Связь с Items
Сундуки связаны с сущностью Items:
- Создается item специального типа
Treasure - В поле
treasure_idуказывается ID созданного сундука - Пользователь получает item-сундук через механики лояльности
- При открытии item-сундука срабатывает механика случайной выдачи награды
Структура сундука
| Поле | Тип данных | Описание |
|---|---|---|
| environment_id | String | ID окружения, к которому принадлежит сундук |
| id | String | Уникальный идентификатор сундука |
| title | String | Название сундука (отображаемое имя) |
| description | Text | Описание сундука |
| type | String | Тип сундука |
| algorithm_id | String | Идентификатор алгоритма выдачи приза (определяет логику рандомизации) |
| status | String | Статус сундука: active, not_active |
| creator | String | Информация о создателе сундука (имя пользователя) |
Работа с призами в сундуке
Каждый сундук содержит набор призов с назначенными вероятностями.
Наполнение сундука призами
Для наполнения сундука призами необходимо загрузить CSV-файл специального формата.
Формат имени файла:
{{treasure_id}}#Описание.csvГде:
{{treasure_id}}- ID сундука (например,daily_chest)Описание- произвольное текстовое описание
Пример: daily_chest#Награды_декабря.csv
Структура CSV-файла:
| Поле | Тип | Описание |
|---|---|---|
| reward_id | String | Идентификатор награды (reward) |
| from | Integer | Начало диапазона вероятности |
| to | Integer | Конец диапазона вероятности |
| treasures_id | String | Идентификатор сундука |
Система вероятностей:
- Диапазон вероятностей: от 1 до 100,000,000
- Каждому призу назначается числовой диапазон
- Чем шире диапазон - тем выше вероятность выпадения
- При открытии сундука генерируется случайное число от 1 до 100,000,000
- Выдается приз, в чей диапазон попало это число
Пример CSV-файла:
reward_id,from,to,treasures_id
bonus_100,1,50000000,daily_chest
bonus_500,50000001,85000000,daily_chest
bonus_1000,85000001,97000000,daily_chest
premium_item,97000001,100000000,daily_chestРасчет вероятностей из примера:
| Приз | Диапазон | Размер диапазона | Вероятность |
|---|---|---|---|
| bonus_100 | 1 - 50,000,000 | 50,000,000 | 50% |
| bonus_500 | 50,000,001 - 85,000,000 | 35,000,000 | 35% |
| bonus_1000 | 85,000,001 - 97,000,000 | 12,000,000 | 12% |
| premium_item | 97,000,001 - 100,000,000 | 3,000,000 | 3% |
Важно: Диапазоны не должны пересекаться. Последнее значение to должно быть равно 100,000,000 для охвата всего диапазона вероятностей.
Преимущества системы диапазонов
- Высокая точность - можно задать вероятности с точностью до 0.000001%
- Гибкость - легко добавлять и удалять призы, перераспределяя диапазоны
- Прозрачность - сразу видно реальные вероятности каждого приза
- Масштабируемость - можно создавать сундуки с сотнями разных наград
Способы задания вероятностей:
-
Равномерное распределение
Приз A: 1 - 33,333,333 (33.33%) Приз B: 33,333,334 - 66,666,666 (33.33%) Приз C: 66,666,667 - 100,000,000 (33.34%) -
Градация по редкости
Обычный: 1 - 70,000,000 (70%) Редкий: 70,000,001 - 95,000,000 (25%) Легендарный: 95,000,001 - 100,000,000 (5%) -
Микро-вероятности для эксклюзивных призов
Стандартные призы: 1 - 99,900,000 (99.9%) Джекпот: 99,900,001 - 100,000,000 (0.1%)
Алгоритмы выдачи призов
Поле algorithm_id определяет логику выдачи наград:
| Алгоритм | Описание | Применение |
|---|---|---|
| Simple Random | Простой случайный выбор по заданным вероятностям | Стандартная механика случайной выдачи |
| Guaranteed Rare | Гарантирует выдачу редкого приза после N попыток | Защита от невезения, гарантия ценного приза |
| No Duplicates | Исключает повторную выдачу одного и того же приза | Коллекционные механики, уникальные награды |
| Tiered | Призы разделены на уровни (тиры). Сначала определяется уровень, затем приз внутри него | Многоуровневые системы редкости (обычный → редкий → легендарный) |
Пример использования Tiered алгоритма:
- Определяется уровень: Обычный (70%), Редкий (25%), Легендарный (5%)
- Внутри выбранного уровня определяется конкретный приз
Практическое применение
Примеры использования Treasures:
- Ежедневные награды – пользователь открывает сундук раз в день и получает случайный приз
- Награды за задания – при выполнении задания пользователь получает сундук вместо фиксированной награды
- Покупка сундуков – пользователи покупают сундуки за баллы/валюту
- Прогрессия редкости – с использованием Guaranteed Rare гарантируется получение редкого приза каждые N открытий
- Коллекции – с алгоритмом No Duplicates пользователи собирают полную коллекцию уникальных наград