> For the complete documentation index, see [llms.txt](https://docs.ragnasync.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ragnasync.com/features/woe-scoring-system.md).

# Guild of the Month

Track guild performance during War of Emperium and crown your Guild of the Month

The Guild of the Month system automatically tracks what happens during your War of Emperium sessions — castle captures, player kills, guild attendance — and turns it into a scored leaderboard posted to Discord. Think of it as an automated scoreboard for your WoE events.

## How It Works

```
WoE Starts → Events are logged → WoE Ends → Scores calculated → Leaderboard posted to Discord
```

Every time WoE runs on your server, RagnaSync quietly records what happens. When the session ends, it crunches the numbers and posts a leaderboard to your chosen Discord channel. No manual work needed — just configure it once and let it run.

## What Gets Tracked

| Event                | What It Records                                       |
| -------------------- | ----------------------------------------------------- |
| **Castle Captures**  | Which guild broke in first, who captured the castle   |
| **Player Kills**     | PvP kills during WoE, tracked per guild               |
| **Attendance**       | How many guild members are present on each castle map |
| **Castle Ownership** | Which guild holds the castle when WoE ends            |
| **Hold Duration**    | How long each guild controlled the castle             |

{% hint style="info" %}
You can toggle each event type individually. If your server doesn't care about kill tracking, just turn it off — the scoring engine handles missing event types gracefully.
{% endhint %}

{% hint style="info" %}
**Quiet castles are skipped.** `@agit_start` spins up every castle on your server, but only the ones players actually contested get a leaderboard embed. If no guild attends, captures, or fights on a castle during the session, RagnaSync silently skips it — no Discord spam and no ghost "Castle Owner" points for whoever happened to be sitting on it.
{% endhint %}

## Scoring

Guilds earn points based on their performance each session. These points add up across the season to determine the Guild of the Month.

| Award           | Default Points | How It's Earned                          |
| --------------- | -------------- | ---------------------------------------- |
| Castle Owner    | 3              | Holding the castle when WoE ends         |
| Longest Defense | 3              | Longest total time controlling a castle  |
| First Break     | 2              | First guild to capture the castle        |
| Attendance      | 1              | Having enough members present during WoE |
| Most Kills      | 1              | Highest guild PvP kill count             |

All point values are fully configurable from your dashboard — adjust them to match what matters on your server.

## Seasons

Scores accumulate within a **season**. When a new season starts, the leaderboard resets and guilds compete fresh. You can manage seasons in a few ways:

| Mode         | How It Works                                               |
| ------------ | ---------------------------------------------------------- |
| **Manual**   | You start new seasons from the dashboard whenever you want |
| **Weekly**   | Season automatically resets every week                     |
| **Biweekly** | Season resets every two weeks                              |
| **Monthly**  | Season resets on the first of each month                   |

When an automatic rotation happens, RagnaSync posts a notification to your GOTM Discord channel announcing the new season.

## Advanced WOE Events

By default, every castle on your server counts toward a single GOTM leaderboard. That works great for most servers. But sometimes you want more control — maybe only *one* of the weekly WoEs should count, or you want a special Christmas event running alongside the regular GOTM. That's what **Advanced WOE Events** is for.

When you turn on advanced mode, you can create multiple **WOE Events** side by side. Each event is its own self-contained scoring scope with its own castle set, date range, scoring rules, and Discord channel.

### Enabling Advanced Mode

On the **Dashboard > Ragnarok > WoE Events** page, click **GOTM Settings** in the header and flip **Advanced WoE Events** on. The **New WoE Event** button appears once the setting is saved.

{% hint style="info" %}
Turning advanced mode off won't delete anything — your custom WoE Events are just hidden and stop scoring. The default catch-all scoring resumes. Turn advanced back on and your events come right back.
{% endhint %}

### Creating a WoE Event

Click **New WoE Event** to open the setup form. Fields are grouped into sections on a single page:

**Event**

* **Name** — what you'll call this event (e.g., "Friday GOTM", "Christmas Event")
* **Active** — an emergency off switch that bypasses dates

**Season Counter**

* **Season** — the starting season number (usually `1`). Read-only after creation; use the per-row **Bump Season** action to advance it manually.
* **Rollover** — when the season counter advances (see below)

**Active Window**

* **Starts At** / **Ends At** — optional date bounds. Leave both blank for an event that runs forever; set one or both to restrict when the event scores. Useful for one-off tournaments.

**Castles**

* Multi-select of the castles this event scores. A WoE on a castle that isn't in your event's castle list won't contribute points to this event.

**Scoring Overrides** (optional)

* Five point values that match the defaults from GOTM Settings: Castle Owner, Longest Held, First Break, Attended, Most Kills.
* Leave any field blank to inherit the default. Fill any in to override just for this event.

**Scoring Eligibility Filter** (optional)

* A rule a WoE session must pass before it scores for this event. Leave it empty and every active session scores, exactly as before. See [Scoring Eligibility Filter](#scoring-eligibility-filter) below.

**Discord Channel**

* Where this event's leaderboard embed posts. Each event can have its own dedicated channel. Leave blank to use the WoeScript default.

### Rollover Modes

Each WOE Event controls how its season counter advances:

| Mode                  | How It Works                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------- |
| **None**              | Season counter never changes. Good for "forever" events.                                          |
| **Manual**            | You advance the season from the dashboard with the **Bump WOE Event Season** button.              |
| **Monthly Increment** | On the first of each month, `season += 1`. This is the default — matches the classic GOTM rhythm. |
| **Calendar Month**    | Season equals the current calendar month (1–12). Re-syncs naturally Jan→Dec.                      |

### Concurrent Events

A castle can belong to multiple active events. When WoE ends on a shared castle, each event that includes it produces an **independent** score row. So a capture in your regular monthly GOTM and a parallel Christmas Event both light up their own leaderboards separately.

### Bumping a Manual Season

If an event's rollover is set to **Manual**, click the **Bump Season** action on the event's row in the WoE Events list. Confirm, and its season jumps by 1. Past scores stay under the previous season for historical leaderboards.

### Scoring Eligibility Filter

Ever had one AFK player sitting on an empty castle hand their guild "Castle Owner" points week after week? The eligibility filter fixes that. It's an optional rule on each WoE Event: if a session doesn't pass, that session simply doesn't count for the event — no points, no leaderboard, no Discord post. Sessions that pass score exactly as normal.

You'll find it in the event form, in the **Scoring Eligibility Filter** section. A filter is built from **condition groups**:

* Conditions **within a group** must *all* match (AND).
* Separate groups are alternatives — *any* group matching is enough (OR).

Each condition compares one session stat against a number:

| Metric                    | What It Measures                                                                                                                                                            |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Peak Guild Attendance** | The largest headcount any *single guild* had in one attendance snapshot. A 5v5 fight reads as `5`, not 10 — it's per guild, the same way the Attendance award counts heads. |
| **Captures**              | How many times the castle changed hands during the session                                                                                                                  |
| **Kills**                 | Total PvP kills during the session                                                                                                                                          |

Operators are the usual suspects: `≥`, `>`, `=`, `≤`, `<`.

A good starter filter is two groups, one condition each:

```
Group 1: Captures ≥ 1
   — OR —
Group 2: Kills ≥ 3
```

That reads as "the castle changed hands at least once, *or* there was real fighting." An uncontested castle with one idle defender fails both groups and quietly drops out of the leaderboard — while every contested castle scores exactly as before.

{% hint style="info" %}
**Not sure what thresholds fit your server?** Open the **Session History** tab on the WoE Dashboard. The stats block at the top shows the min / median / max of each metric across your recent sessions, and picking an event from the selector adds a live **PASS** / **FAIL** badge to every past session — so you can see exactly which sessions a filter would have excluded before you commit to it. Editing the filter updates the badges immediately; nothing is re-scored.
{% endhint %}

{% hint style="warning" %}
The filter only affects sessions processed **after** you save it. Historical scores are never recalculated — if a quiet castle already earned points last week, those points stand. Fix forward, not backward.
{% endhint %}

Each event has its own filter, so your strict "Friday GOTM" can demand real fights while a casual parallel event accepts everything. An event with no filter behaves exactly as it always has.

## Server Configuration

Add these settings to the `discord: { }` block in your `conf/channels.conf`:

```
// Guild of the Month (GOTM) WoE event logging
ragnasync_gotm_enabled: true
ragnasync_gotm_channel_id: "YOUR_CHANNEL_ID"
ragnasync_gotm_capture_events: true
ragnasync_gotm_player_kill_events: true
ragnasync_gotm_attendance_events: true
ragnasync_gotm_attendance_interval: 60
```

| Setting                              | Default | Description                                      |
| ------------------------------------ | ------- | ------------------------------------------------ |
| `ragnasync_gotm_enabled`             | `false` | Turn GOTM event logging on or off                |
| `ragnasync_gotm_channel_id`          | `""`    | Discord channel ID where leaderboards are posted |
| `ragnasync_gotm_capture_events`      | `true`  | Log castle capture events                        |
| `ragnasync_gotm_player_kill_events`  | `true`  | Log player kills during WoE                      |
| `ragnasync_gotm_attendance_events`   | `true`  | Take attendance snapshots during WoE             |
| `ragnasync_gotm_attendance_interval` | `60`    | Seconds between attendance snapshots             |

{% hint style="warning" %}
The `ragnasync_gotm_channel_id` setting syncs to your RagnaSync dashboard automatically when your server connects. You can also set or override it from the dashboard's WoE Events page.
{% endhint %}

## Dashboard

The GOTM UI is split across two pages under **Dashboard > Ragnarok**:

### WoE Events — manage your events

The primary page for creating and configuring events. Shows a table of all WoE Events for your client with their season, rollover mode, active state, date range, castle count, and Discord channel.

Header actions:

* **New WoE Event** — opens the create form (only visible when Advanced mode is on).
* **GOTM Settings** — modal containing the master GOTM on/off toggle, Advanced mode toggle, default point values, attendance threshold, and legacy fallback settings.
* **Start New Season** — bumps the client-level season counter (legacy scoring path only).
* **Reset Season Scores** — permanently deletes score rows for the current season.

Per-row actions:

* **Bump Season** — advances the event's season counter (only shown for Manual rollover events).
* **Edit** — opens the full event form.
* **Delete** — soft-deletes the event (never available on the Default event).

Click any row to jump to its edit page.

### WoE Dashboard — view past sessions and leaderboards

Read-only page with two tabs:

**Session History** — Browse your most recent WoE sessions as expandable cards, with a stats block up top summarizing them:

* **Min · median · max** for Peak Guild Attendance, Captures, and Kills across the listed sessions
* An **Uncontested** count — sessions with zero captures *and* zero kills

Each session card shows the **date and time**, the **castle**, and the **season**. Click one to expand it and see:

* **Duration** of the session
* Which guild **owned the castle** at the end
* **Peak Guild Attendance**, **Captures**, and **Kills**

There's also an event selector at the top of the tab. Pick a WoE Event and every session gets a live **PASS** / **FAIL** badge showing whether it would clear that event's [scoring eligibility filter](#scoring-eligibility-filter) — the easiest way to tune thresholds against your server's real history. Sessions on castles outside the event's scope (and events with no filter) show no badge.

**Leaderboard** — View season rankings with selectors for both the **WoE Event** and the **Season**:

* **WoE Event selector** — pick which event's leaderboard to view. Defaults to your Default event. Choose "— Legacy (no event) —" to see pre-advanced historical scores.
* **Season selector** — browse past seasons of the selected event.
* **Global rankings** — total scores across all castles, with last session points.
* **Per-castle breakdown** — expandable details showing how guilds performed on each individual castle.

## Discord Leaderboard

After each WoE session, RagnaSync posts an embed to your configured Discord channel that looks something like this:

```
🏰 Prontera Castle WOE Session Complete
📊 Event Highlights:
• Duration: 1h 0m
• Participating Guilds: 4
• Total Events: 87 (52 kills, 3 captures, 4 guilds attended)
• Castle Changed Hands: Yes

🏆 Award Winners:
👑 Castle Owner: DragonKnights (+3 XP)
🛡️ Longest Defense: PhoenixOrder (+3 XP)
⚔️ First Break: ShadowRealm (+2 XP)
💀 Most Kills: DragonKnights (+1 XP)
🎯 Attendance: 4 Guilds (+1 XP each)

📋 Prontera Castle Leaderboard:
🥇 DragonKnights - 28 XP (+4 this session)
🥈 PhoenixOrder - 24 XP (+3 this session)
🥉 ShadowRealm - 18 XP (+2 this session)

🌍 Season 1 Global Leaderboard (All Castles):
🥇 DragonKnights - 52 XP
🥈 PhoenixOrder - 41 XP
🥉 ShadowRealm - 33 XP
```

## Example Use Cases

### Competitive WoE Server

Run weekly seasons with high point values. Your guilds will fight hard knowing the leaderboard resets every Monday:

```
ragnasync_gotm_enabled: true
ragnasync_gotm_channel_id: "YOUR_CHANNEL_ID"
```

Then set **Season Rotation** to **Weekly** on the dashboard.

### Casual Server

Use monthly seasons and only track castle ownership — skip the kill tracking if PvP isn't the focus:

```
ragnasync_gotm_enabled: true
ragnasync_gotm_channel_id: "YOUR_CHANNEL_ID"
ragnasync_gotm_player_kill_events: false
```

### Tournament Events

Keep seasons on **Manual** and start a new one for each tournament. Reset scores between events from the dashboard.

### Only Score One WoE Per Week (advanced)

Your active guild wants the Friday castle to decide GOTM — not Tuesday or Wednesday. Turn on advanced mode, create a WOE Event named "Friday GOTM" with **Monthly Increment** rollover, and attach *only* the castle that runs on Friday. Every other WoE is still recorded in your session history, but only Friday captures feed the leaderboard.

### Parallel Special Event (advanced)

You want to run a Christmas Event alongside your regular monthly GOTM. Both should score the same castles, but the Christmas Event has bigger point rewards. Create a new WOE Event named "Christmas 2026", set its **Starts At** to Dec 20 and **Ends At** to Jan 2, attach the same castles as your default event, override the scoring (e.g., Castle Owner = 10 instead of 3), and set a different **Discord Channel** so the Christmas leaderboard posts separately.

Both events score every WoE during the window — your normal GOTM keeps running, and the Christmas leaderboard lights up in its own channel.

## Notes

* GOTM works with any WoE schedule your server defines — RagnaSync doesn't control when WoE runs, it just listens for events
* Multiple castles running simultaneously are tracked independently
* If no captures or kills happen during a session (low population), the castle owner still gets their points — unless the event has a [scoring eligibility filter](#scoring-eligibility-filter) that excludes such sessions
* Older RagnaSync client versions without the GOTM channel setting will still work — just configure the channel from the dashboard instead
