MatchmakingPROEditor

The editor-only companion module. It adds the MatchmakingPRO Debug panel for live PIE inspection, registers the MatchmakingPRO asset category in the Content Browser with three asset types (Rule Set, Game Mode Profile, Travel Playlist), and powers the one-click genre presets. It compiles only into editor builds — packaged games carry none of it.

Type: Editor Loading: Default Zero runtime footprint Slate · AssetTools · UnrealEd

What the Editor Module Does

On editor startup (FMatchmakingPROEditorModule::StartupModule) the module registers three things; on shutdown it cleanly unregisters them all.

🔍 Live Debug Panel

A dockable nomad tab — Window → Developer Tools → MatchmakingPRO Debug — that watches the running PIE session's matchmaking subsystem and refreshes twice a second.

📁 Asset Category & Factories

Registers an advanced asset category named MatchmakingPRO with AssetTools and three UFactory classes, so all plugin config assets are created from the Content Browser's right-click menu like native types.

🎛 Genre Preset Authoring

New Game Mode Profile assets open pre-filled, and changing the Preset dropdown re-fills every field through PostEditChangeProperty — Racing grid, Football 5v5, BR 100 and the rest are one click each.

RegistrationAPI usedUnregistered on shutdown
Debug tab spawner MMProDebugPanelFGlobalTabmanager::RegisterNomadTabSpawner, grouped under Developer Tools → Miscellaneous
Asset category "MatchmakingPRO"IAssetTools::RegisterAdvancedAssetCategory—(category ids are session-scoped)
3 × asset type actions + 3 × factoriesRegisterAssetTypeActions / UFactory subclasses

The Debug Panel — SMMProDebugPanel

Open it: Window → Developer Tools → MatchmakingPRO Debug. It is a Slate widget (scrollable, dockable anywhere) that polls the PIE world's UMMProSubsystem on a 0.5-second active timer. Outside PIE it shows "Start a PIE session to inspect matchmaking state."

What it displays

BlockContentsSource
StateThe live flow state: Idle, Queued, Searching, MatchFound, ReadyCheck, Allocating, Connecting, InMatch, Failed, Cancelled.GetState()
Local player lineDisplay name · rating ± deviation (Glicko-2 uncertainty) · W/L/D record · region id.GetLocalPlayerProfile()
Queues tableOne row per live queue: queue name, waiting tickets, waiting players (parties counted), and the rolling estimated wait in seconds.GetQueueDebugInfo()
Local ticketOnly while you are queued: 1-based queue position, elapsed seconds, estimated wait, and the current expansion level (watch tolerances loosen live: L0 → L1 → L2…).GetQueueStatus()
AnalyticsSession counters: matches made, tickets submitted, tickets cancelled, failed ready checks, average wait seconds and average match quality (0–1 rule score).GetAnalytics()

Sample output (live during PIE)

State: Searching
Local: AlienXP  rating 1512 (+/- 187)  W/L/D 14/9/2  region EU-West

Queues:
  Ranked1v1        tickets   3  players   3  est wait 24s
  TDM              tickets   9  players  14  est wait 41s
  Race             tickets   2  players   2  est wait 60s

Local ticket: pos 1, elapsed 37s, est 24s, expansion L2

Analytics:
  matches 6  tickets 11  cancels 1  failed ready checks 2
  avg wait 28.4s  avg quality 0.81

What it's for

ScenarioWhat to watch
"Why is nobody matching?"Queues table — are tickets even in the same queue? Local ticket — is the expansion level climbing? If quality rules are too strict, tickets sit while L grows.
Tuning rule setsAverage match quality vs average wait: loosen rules → faster matches, lower quality; tighten → the inverse. Tune until both numbers fit your game.
Flow debuggingThe State line steps through the whole pipeline in real time — see exactly where a flow stalls (e.g. stuck Allocating = backend allocation problem).
Penalty / dodge testingDecline a ready check → failed ready checks increments → next StartMatchmaking fails with the ban message.
Tip: combine with ForceMatchNow(Queue) (admin call, also BlueprintCallable) to fire an undersized match instantly while testing, and watch the analytics update.

Asset Tools — Content Browser Integration

Right-click in the Content Browser → MatchmakingPRO category. Three asset types, each with its own factory, display name and thumbnail color. All are edited with the standard property editor (rules are EditInlineNew instanced objects, so they expand inline).

AssetClassCreated withWhat it configures
Matchmaking Rule Set UMMProRuleSet UMMProRuleSetFactory — new assets start with the full default stack: Skill + Latency + Region + Team Balance rules already instanced. Match shape (FMMProMatchParams), ordered rules with per-rule tuning, expansion interval/cap, minimum match quality, ranked flag, level gate, A/B ExperimentTag.
Game Mode Profile UMMProGameModeProfile UMMProGameModeProfileFactory — opens pre-filled as Shooter TDM; change the Preset dropdown to re-fill. A complete genre bundle: queue name, match params, rule-set asset, travel playlist, ranked flag, level requirement. Registered as a live queue via settings or RegisterGameModeProfile().
Travel Playlist UMMProPlaylistData UMMProPlaylistDataFactory — empty rotation. Ordered maps/tracks/stadiums with per-entry game mode and extra URL options; loop flag. Walked by the Travel Manager for round/track/stadium rotation.

Authoring a Queue — End to End in the Editor

1
Create the profile.

Content Browser → right-click → MatchmakingPRO → Game Mode Profile. In the details panel set Preset = "Racing — 8 Player Grid". Every field re-fills: FFA × 8, min 4 to start, bots on, rating = lap-time percentile, queue name Race.

2
Optionally add a custom Rule Set.

Create a Matchmaking Rule Set, tweak the instanced rules inline (e.g. widen MaxRatingDifference, disable the region rule), and assign it to the profile's RuleSet slot. Leave it empty to use a default stack shaped by the preset.

3
Build the track rotation.

Create a Travel Playlist, add entries (Monza → Spa → Suzuka, each with ?Laps=5-style options), assign it to the profile's Playlist slot.

4
Register it.

Project Settings → Game → MatchmakingPRO → add the profile asset to GameModeProfiles. The queue exists at every startup. (Or call RegisterGameModeProfile() at runtime.)

5
Test it live.

Open the MatchmakingPRO Debug tab, hit PIE, call StartMatchmaking("Race") — watch the ticket appear, the expansion level climb, bots fill the grid at the 4-player minimum, and the analytics update when the match fires.

Project Settings Page

The settings page itself comes from the runtime module (UMMProSettings is a UDeveloperSettings), but it surfaces in the editor at Project Settings → Game → MatchmakingPRO and is part of the editor workflow:

Everything saves to Config/DefaultGame.ini — diff-friendly and source-controllable.

Module Files

FileContains
MatchmakingPROEditor.Build.csEditor-only deps: Slate, SlateCore, UnrealEd, EditorStyle, AssetTools, WorkspaceMenuStructure, Projects + the runtime module.
MatchmakingPROEditor.h/.cppModule class — registers/unregisters the tab spawner, asset category and all asset type actions.
MMProDebugPanel.h/.cppSMMProDebugPanel Slate widget: PIE subsystem lookup, 0.5 s active timer, report text builder (state / profile / queues / ticket / analytics).
MMProRuleEditor.h/.cppUMMProRuleSetFactory (pre-fills the 4 default rules) + asset type actions (coral thumbnail).
MMProGameModeProfileEditor.h/.cppUMMProGameModeProfileFactory (preset pre-fill) + UMMProPlaylistDataFactory + both asset type actions (blue / green thumbnails).
Packaging: the module's Type is Editor in the .uplugin, so cooked/shipping builds exclude it entirely — no Slate, no AssetTools, no debug panel code ships with the game.