Skip to main content

Streak System

The Streak System rewards players for consistently completing daily quests. Unlike a traditional consecutive-day streak that punishes missing a single day, KyuubiSoft uses a cumulative model with a grace period window to reduce FOMO (fear of missing out).

How It Works

Instead of tracking consecutive days in a row, the system counts how many active days a player has within a rolling window. An "active day" is any day where the player logged in and participated in quests.

Example with default settings (7 days in 14-day window):

A player who plays 7 out of the last 14 days earns the Bronze milestone -- even if those 7 days are not consecutive. They could play Monday through Wednesday, skip Thursday through Sunday, then play Monday through Thursday the next week and still qualify.

tip

This cumulative approach means players are never penalized for taking a break. Missing a few days does not reset progress -- it simply means the active day count grows more slowly.

Configuration

The streak system is configured in config.json under the streak section:

{
"streak": {
"enabled": true,
"cumulative": true,
"gracePeriodDays": 7,
"gracePeriodWindow": 14,
"milestones": [
{ "days": 7, "lootbagId": "streak_reward_7", "tier": "bronze" },
{ "days": 14, "lootbagId": "streak_reward_14", "tier": "silver" },
{ "days": 21, "lootbagId": "streak_reward_21", "tier": "gold" },
{ "days": 28, "lootbagId": "streak_reward_28", "tier": "platinum" }
]
}
}

Settings

SettingDefaultDescription
enabledtrueEnable or disable the streak system entirely
cumulativetrueUse cumulative (anti-FOMO) model instead of consecutive days
gracePeriodDays7Number of active days needed within the window
gracePeriodWindow14Rolling window size in days
milestones(see below)Reward tiers at specific day counts

Grace Period Explained

The gracePeriodDays and gracePeriodWindow work together:

  • The system looks at the last gracePeriodWindow days (default: 14)
  • It counts how many of those days the player was active
  • Days older than the window are automatically cleaned up during weekly resets

This means the streak counter can go down if a player stops logging in -- old active days fall outside the window and are removed. The counter reflects the player's recent activity, not their all-time total.

Milestones

Milestones are rewards granted when a player's cumulative active days reach specific thresholds:

MilestoneDays RequiredDefault RewardTier
Bronze7streak_reward_7 lootbagbronze
Silver14streak_reward_14 lootbagsilver
Gold21streak_reward_21 lootbaggold
Platinum28streak_reward_28 lootbagplatinum

Milestone Fields

{
"days": 7,
"lootbagId": "streak_reward_7",
"tier": "bronze"
}
FieldDescription
daysNumber of active days required to unlock this milestone
lootbagIdID of the loot bag reward (from the Lootbags system)
tierDisplay tier name used in the UI and notifications
info

Each milestone can only be claimed once. Once a player claims the Bronze reward, they will not receive it again even if their streak counter resets and then reaches 7 again.

Quest Token Earnings

The streak system integrates with Quest Tokens. Token rewards are configured in the economy section of config.json:

{
"economy": {
"tokenEarnings": {
"dailyQuestComplete": 1,
"allDailiesBonus": 2,
"weeklyQuestComplete": 5,
"streakBronze": 5,
"streakSilver": 10,
"streakGold": 15,
"streakPlatinum": 20
}
}
}
Streak TierBonus Tokens
Bronze (7 days)5 tokens
Silver (14 days)10 tokens
Gold (21 days)15 tokens
Platinum (28 days)20 tokens

These token rewards are granted in addition to the lootbag milestone reward.

HUD Display

The player's current streak is visible in the Quest Book UI. The streak counter shows:

  • Current Streak -- Number of active days in the current window
  • Longest Streak -- The highest streak the player has ever achieved
  • Milestone Progress -- Visual indicators for upcoming and claimed milestones

Streak Tracking Details

  • An active day is recorded when a player logs in during the daily reset cycle
  • The streak counter is recalculated whenever a new day is recorded
  • Old streak dates outside the gracePeriodWindow are cleaned up during the weekly reset
  • Streak data persists across server restarts (saved per-player as JSON)

Customization Examples

Casual server -- play 3 out of 7 days for Bronze:

{ "streak": { "gracePeriodDays": 3, "gracePeriodWindow": 7, "milestones": [
{ "days": 3, "lootbagId": "streak_casual_3", "tier": "bronze" },
{ "days": 7, "lootbagId": "streak_casual_7", "tier": "silver" }
] } }

Hardcore server -- tight window, high requirements:

{ "streak": { "gracePeriodDays": 14, "gracePeriodWindow": 16, "milestones": [
{ "days": 14, "lootbagId": "streak_hard_14", "tier": "bronze" },
{ "days": 28, "lootbagId": "streak_hard_28", "tier": "silver" },
{ "days": 56, "lootbagId": "streak_hard_56", "tier": "gold" }
] } }
warning

Setting gracePeriodWindow too close to gracePeriodDays effectively requires consecutive days and removes the anti-FOMO benefit. A good ratio is at least 2:1 (window is double the required days).