> For the complete documentation index, see [llms.txt](https://ragnaworld-network.gitbook.io/wiki-ragnaworld-network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ragnaworld-network.gitbook.io/wiki-ragnaworld-network/retro-server/general-information/streamer-program/streamer-rewards.md).

# Streamer Rewards

## RetRO Streamer Program — System Guide

> In-game reward system for verified **RetRO streamers** and the players they recruit.

***

<figure><img src="https://3566086538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs3QAS0VSTzApkhckXyhs%2Fuploads%2Fm8hbR7AotLUt9MKv5yV3%2F%7BDCCCBE9E-659D-4DB7-B76E-0CA58A027F26%7D.png?alt=media&amp;token=d26b4ac2-1ad7-4490-b15e-ee4b014cff87" alt=""><figcaption></figcaption></figure>

### 1. Overview

The Streamer Program rewards streamers for streaming RetRO content and lets them bring new players into the community. There are four in-game features:

| Feature             | Who can use                             | When                         |
| ------------------- | --------------------------------------- | ---------------------------- |
| Daily Supply        | Verified streamers                      | Once per day                 |
| Weekly Supply       | Verified streamers                      | Once per week (Mon–Sun)      |
| Invite Code         | Streamers (generate) / players (redeem) | Anytime                      |
| Invite Compensation | Invited players                         | Once, after reaching a level |

> **Core concept:** The game server cannot detect streaming platforms (Twitch / YouTube / Facebook). To enforce the program rules, **in-game online time is used as a proxy for streaming time**. A streamer must accumulate a minimum amount of play/stream time in the current day before claiming supplies.

***

### 2. Becoming a Streamer

**How to apply (as a player):**

1. Stream RetRO content regularly (Twitch, YouTube, Facebook).
2. DM **RagnaWorld** or **ADM Sarah** on Discord with your real name, profile link, RO experience, and stream link.
3. Once approved, staff verify you in-game.
4. Visit the Streamer Program NPC to claim your supplies.

**How staff verifies (Admin only):**

| Command                    | Effect                                                                                                |
| -------------------------- | ----------------------------------------------------------------------------------------------------- |
| `@addstreamer <char name>` | Adds or re-activates a streamer (target may be online or offline). Sends a private message if online. |
| `@delstreamer <char name>` | Deactivates a streamer (soft-removes — history is kept, `active = 0`).                                |

> Streamers are identified by **account**, not by character. Multiple characters on the same account share one streamer status and one supply cooldown.

***

### 3. NPC Location

| Setting     | Value                                  |
| ----------- | -------------------------------------- |
| Map         | `prt_in` (Prontera Cathedral interior) |
| Coordinates | `44, 112`                              |
| NPC name    | `Streamer Program#rw`                  |

The NPC automatically detects whether you are a verified streamer and shows the appropriate menu.

***

### 4. Menus

**Streamer menu**

```
Claim Daily Supply
Claim Weekly Supply
Generate / View Invite Code
Claim Invited Reward
View Invite Stats
Exit
```

**Non-streamer menu**

```
Enter a Streamer Invite Code
Claim Invited Reward
Register as a Streamer
Exit
```

* **Register as a Streamer** is informational only — it explains how to apply via Discord.

***

### 5. Play / Stream Time Requirement

This is the gate for both daily and weekly supplies.

* A streamer must accumulate at least **`streamer_min_play_seconds`** of in-game time in the **current day** before claiming.
* Default: `7200` seconds = **2 hours**. Set `10800` for **3 hours**.

**How it is measured**

1. A hidden timer script (`streamer_timetracker`) fires on login/logout for verified streamers.
2. On login it records the session start (system epoch).
3. On logout it adds the elapsed seconds to a per-account daily total.
4. The daily total is keyed by the calendar day (`YYYY-MM-DD`). At day rollover the total resets to `0`.
5. Time from **multiple sessions** on the same day accumulates (e.g. 1h morning + 1h evening = 2h).

**The check**

```
stream_time_today = accumulated_seconds_today + current_session_elapsed

if stream_time_today < streamer_min_play_seconds  →  BLOCKED
```

If the requirement is not met, the NPC shows:

> *"You must stream for at least Xh Xm today before claiming your supply. Current stream time: Xh Xm."*

Setting `streamer_require_playtime = 0` disables the time gate entirely.

> **Note:** Because the server cannot see the actual stream, in-game play time is the measured value. A streamer who plays 2h without streaming would still clear the gate. If real stream validation is required, a manual flow or staff oversight is needed.

***

### 6. Daily Supply

**Conditions to claim**

1. Must be a verified streamer.
2. Must not have claimed today (tracked by `last_daily`).
3. Must meet the minimum play-time for today (if playtime is enabled).

**Items (5)**

| Item             | ID    | Qty |
| ---------------- | ----- | --- |
| Old Blue Box     | 603   | 5   |
| Yggdrasil Berry  | 607   | 10  |
| Battle Manual    | 12208 | 1   |
| White Potion     | 504   | 10  |
| Enriched Elunium | 7619  | 1   |

Configurable via `streamer_daily_items` in the config table (`id:qty,id:qty,...`).

***

### 7. Weekly Supply

**Conditions to claim**

1. Must be a verified streamer.
2. Must not have claimed this week (tracked by `last_weekly`, resets Monday).
3. Must meet the minimum play-time for today (if enabled).

**Items (10)**

| Item              | ID    | Qty |
| ----------------- | ----- | --- |
| Old Blue Box      | 603   | 20  |
| Yggdrasil Berry   | 607   | 30  |
| Battle Manual     | 12208 | 3   |
| White Potion      | 504   | 20  |
| Enriched Elunium  | 7619  | 3   |
| Enriched Oridecon | 7620  | 3   |
| Awakening Potion  | 656   | 5   |
| Kafra Card        | 12211 | 1   |
| Blue Potion       | 505   | 20  |
| Bravery Badge     | 7828  | 5   |

**Plus one random costume** drawn from the pool below.

```
19518, 31121, 31475, 31368, 20448, 31538, 20132, 20502
```

***

### 8. Invite Code & Compensation

This is the referral-style feature: a streamer recruits players and compensates them for joining.

#### Streamer side — "Generate / View Invite Code"

* Streamers generate **one** invite code.
* A streamer only ever has one active code; the menu simply displays it again if it was already generated.
* The menu also shows how many invites they have and how many already claimed.

#### Player side — "Enter a Streamer Invite Code"

* Any player may redeem one code.
* **An account can only redeem one code** (enforced as UNIQUE).
* A player **cannot use their own code**.
* The invite is rejected when the player's IP matches the streamer's IP (anti self-recruiting).
* After redeeming, the player is told which level to reach and to return.

#### Player side — "Claim Invited Reward"

* The invited player must reach **Base Level** (default 30) before claiming.
* Reward package:

| Reward          | ID  | Qty |
| --------------- | --- | --- |
| Cash Points     | —   | 20  |
| Old Blue Box    | 603 | 5   |
| Yggdrasil Berry | 607 | 5   |
| White Potion    | 504 | 10  |

* Can only be claimed once per account.
* A global announcement is broadcast on claim.

#### Streamer side — "View Invite Stats"

* Total invites.
* Rewards claimed.
* List of invited players with pending/claimed status.

***

### 9. Anti-Abuse Measures

* One invite code per streamer (UNIQUE).
* One redeemed code per account (UNIQUE).
* Cannot use your own code.
* Optional different-IP requirement between streamer and invitee.
* Daily/weekly cooldowns stored in SQL timestamps (survive server restarts).
* Play-time gate prevents rewards without genuine play/streaming.

***

### 10. Example Scenarios

**A streamer's day**

1. They log in — the timer starts.
2. They stream for 2+ hours (in-game time accumulates).
3. They visit the Streamer Program NPC (`prt_in` 44,112).
4. **Claim Daily Supply** → passes the play-time gate → receives 5 items → the daily cooldown is set.
5. They generate their invite code and share it with viewers.
6. Once a week, **Claim Weekly Supply** → 10 items + 1 random costume.

**A recruited player**

1. A streamer shares their code.
2. The player enters it at the NPC.
3. They are recorded as invited (once per account, IP-checked).
4. They play until Base Level 30.
5. They return and **Claim Invited Reward** → receive the compensation package.

**A streamer removed from the program**

They immediately can no longer claim supplies or manage their code.

***

### 11. Limitations & Caveats

* **Stream-time proxy:** the system measures in-game play time, not actual platform streaming. Consider staff oversight if strict real-stream validation is required.
* **Duplicate costumes:** the weekly costume is random, so a streamer may receive one they already own. There is no ownership check on the weekly drop.
* **Cross-midnight sessions:** a session spanning midnight is re-baselined at rollover, so only post-midnight time counts toward the new day.
