Command Reference
/stats

/stats

In-game stat tracking for Mordhau — kills, deaths, score, and (Hardpoint) time-on-point, recorded per round, per game, per match. Tracked modes: Skirmish (SKM) and Hardpoint (HPT) only.

Stats come in three buckets:

  • Competitive — officially scheduled league matches
  • Casual — scrims (team vs team, unscheduled) and pugs (mixed teams)
  • Overall — everything combined

Players are identified by their linked PlayFab ID — run /identity link or your stats can't be credited to you. Stats recorded before you link are backfilled automatically once you do.

/stats player

Your (or another player's) tracked stats, shown as Competitive / Casual / Overall.

  • user User (optional)
  • mode String (optional) — filter to SKM or HPT

/stats match

One tracked match's breakdown: per-game mode, map, final score, winner, and top performer.

  • id String — the stat match id shown on stat embeds and imports

/stats leaderboard

Top 10 tracked players, sorted by the chosen stat (ties broken by total score).

  • stat String (optional) — K/D (default), Kills, Score, Time on point, Clutches, or Rounds played
  • type String (optional) — Overall (default), Competitive, or Casual
  • mode String (optional) — filter to SKM or HPT

Ranking normally requires 10+ tracked rounds in the chosen bucket. The board always renders: while nobody meets the minimum it shows all players marked provisional, and with no data at all it says so instead of erroring.

Persistent leaderboards

Besides the on-demand command, a channel can host always-current leaderboard embeds — one message per bucket, edited in place (never reposted, so message links stay stable):

  • Top row: Kills, Score, K/D — top 5 each
  • Second row: Clutches, Time on Point, Rounds Played — top 3 each
  • Distinct colors per bucket (🏆 Competitive red, 🎮 Casual blue, 🌐 Overall gold)

Set it up with /config stats-leaderboard-channel: and pick buckets with /config stats-leaderboard-buckets: (default: competitive + overall). The embeds refresh automatically whenever approved stats change: a tracked match finishes, an organizer approves/voids/restores anything, or a match is imported or reclassified. The same 10-round ranking floor applies per bucket, with the same provisional fallback.

The channel may be the team elo leaderboard channel — the stat messages are tracked and survive its repost cycle — or any other channel you prefer.

/stats import (Organizer)

Import a stat match from a JSON file. Imports are idempotent — re-importing the same externalId updates instead of duplicating. Validation errors name the exact field (games[0].players[2].score: expected a number).

  • file Attachment — a StatMatch payload:
{
  "contractVersion": 1,
  "externalId": "comp-1-2026-08-03-2100",
  "matchType": "competitive",
  "server": "comp-1",
  "startedAt": 1754250000000,
  "games": [{
    "mode": "SKM",
    "map": "Moshpit",
    "winnerSide": 0,
    "finalScore": {"side0": 7, "side1": 4},
    "players": [{"playfabId": "77A5DDC1BC678308", "name": "ore023", "side": 0,
                  "kills": 12, "deaths": 8, "teamKills": 0, "suicides": 0, "score": 1450}],
    "rounds": [{"index": 0, "winnerSide": 0,
                 "players": [{"playfabId": "77A5DDC1BC678308", "kills": 2, "deaths": 0, "score": 220}]}]
  }]
}

HPT games use "segments": [{"side": 0, "seconds": 42, "points": 42}] instead of rounds, plus per-player timeOnPoint.

/stats reclassify (Organizer)

Move a match between buckets (e.g. a scheduled match that was detected as a scrim). Only stat bucketing changes — league match results and elo are never touched. Audited.

  • id String
  • type String — competitive / scrim / pug

Clutches (1vX) — Skirmish only

Because Skirmish is one life per round, the collector tracks the full alive pool and detects clutch situations: the moment a player becomes their team's last one standing against 2 or more living enemies. If their team then wins the round, that's a 1vX clutch won — announced live in the stats channel (🔥 CLUTCHname won the 1v3!), shown on /stats player (🔥 3 clutches (best 1v3)), and rankable via /stats leaderboard stat:Clutches. Failed attempts are recorded too.

  • X is fixed at the moment the clutch begins — killing two of three enemies and finishing 1v1 still counts as the 1v3 it started as.
  • A mid-round disconnect counts as an elimination for the alive pool (but not as a death for the leaver), so clutch detection can't be cheated by rage-quits.
  • 1v1 games never produce clutches — X must be ≥ 2.
  • Hardpoint has no clutches: respawns are enabled there, so "last alive" is meaningless. Clutch data only exists on SKM rounds.

Conventions

  • Suicides count as deaths; team kills are tracked separately and never count toward kills or K/D.
  • Voided rounds/games/matches are excluded from all aggregates.
  • Stat matches are recorded automatically by the collector on servers registered via /server add (Skirmish and Hardpoint sessions only), or entered manually via /stats import.