daily_reward_calendar

Объект состояния календаря наград за вход, возвращается в calendars[] методом /rewards/daily/status и в calendar методом /rewards/daily/claim.

{
    "calendar_id": "daily_rewards_2026_08",
    "calendar_type": "standard",
    "month": "august",
    "cycle_number": 1,
    "days": [
        {
            "day": 1,
            "reward": { "type_id": "soft", "amount": 1000 },
            "claimed": false,
            "claimable": true,
            "isSpecial": false,
            "rewardState": "claimable"
        }
    ],
    "current_day": 1,
    "available_day": 1,
    "claimed_days": [],
    "can_claim": true,
    "is_visible": true,
    "locked_reason": null,
    "server_time": 1780000000,
    "next_reset_at": 1780012800,
    "next_month_at": 1782000000,
    "starts_at": 1780000000,
    "ends_at": 1782000000,
    "reset_at": 1780012800,
    "next_reward_at": 1780012800,
    "days_count": 30,
    "claimed_total": 0,
    "last_claimed_at": 0,
    "day_key": 20260801
}

Авто-копирование standard-календаря: если для текущего момента не сконфигурирован ни один активный standard-календарь (например, ГД забыли занести следующий месяц), сервер автоматически копирует конфиг последнего закончившегося standard-календаря в новый calendar_id, привязанный к текущему месяцу, — до тех пор, пока ГД не занесёт настоящий календарь на этот месяц. event-календари в этом не участвуют — они просто заканчиваются. Прогресс у игроков начинается заново (личный День 1) на новом calendar_id, как при любой смене месяца.

Поле Тип Описание
calendar_id string Идентификатор календаря из конфига
calendar_type string standard или event
month string Название месяца в нижнем регистре (august), выводится из starts_at. Никогда не пусто.
cycle_number int Номер цикла прогресса. Увеличивается при клейме последнего дня конфига.
days array Сетка дней, см. ниже
current_day int Текущий день прогресса, кламп на days_count (effectiveDay)
available_day int День, который можно забрать прямо сейчас; 0, если нечего забирать
claimed_days int[] Дни, забранные в рамках текущего цикла
can_claim bool Инвариант: can_claim === (locked_reason === null)
is_visible bool Календарь сейчас в своём окне [starts_at, ends_at) и включён (для auto-скопированного календаря это всегда так — у него своё собственное окно на текущий месяц)
locked_reason string|null null (доступно) | claimed_today | not_started | ended | inactive
server_time int Текущее игровое время сервера (с учётом time_shift)
next_reset_at int Следующая граница сброса фичи (FeatureDay::nextResetAt)
next_month_at int Момент, когда календарь закончится/сменится. Никогда не 0.
starts_at / ends_at int Границы окна активности календаря, полуоткрытый интервал
reset_at int Алиас next_reset_at
next_reward_at int next_reset_at, если календарь активен; 0, если неактивен
days_count int Длина конфига (количество дней)
claimed_total int Пожизненное количество забранных дней по этому календарю
last_claimed_at int Метка времени последнего клейма, 0 если не было
day_key int Серверный дневной ключ ответа (YYYYMMDD), для поддержки

days[i]

Поле Тип Описание
day int Номер дня, 1..days_count
reward object { type_id, amount }
claimed bool Забран в рамках текущего цикла
claimable bool Можно забрать прямо сейчас
isSpecial bool Флаг ценной награды
rewardState string claimed | claimable | locked