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.
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
| Setting | Default | Description |
|---|---|---|
enabled | true | Enable or disable the streak system entirely |
cumulative | true | Use cumulative (anti-FOMO) model instead of consecutive days |
gracePeriodDays | 7 | Number of active days needed within the window |
gracePeriodWindow | 14 | Rolling 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
gracePeriodWindowdays (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:
| Milestone | Days Required | Default Reward | Tier |
|---|---|---|---|
| Bronze | 7 | streak_reward_7 lootbag | bronze |
| Silver | 14 | streak_reward_14 lootbag | silver |
| Gold | 21 | streak_reward_21 lootbag | gold |
| Platinum | 28 | streak_reward_28 lootbag | platinum |
Milestone Fields
{
"days": 7,
"lootbagId": "streak_reward_7",
"tier": "bronze"
}
| Field | Description |
|---|---|
days | Number of active days required to unlock this milestone |
lootbagId | ID of the loot bag reward (from the Lootbags system) |
tier | Display tier name used in the UI and notifications |
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 Tier | Bonus 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
gracePeriodWindoware 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" }
] } }
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).