Skill Based Matchmaking System with MMR

Introduction

Recently, I’ve just started working on a skill based match making system that I plan to release as a plugin. Very much like the MMR matchmaking systems that popular games like DOTA and League of Legends use, my match making system will also contain a hidden MMR for each player, and allow users to create leagues similar to that of popular MOBA games (Bronze, Silver, Gold, etcetera)

What will this plugin provide?

Note: These will be implemented as MVP for V1 of release. More will be added later depending on feedback

  • Player Accounts
  • Hidden Skill based MMR (ELO System)
  • Single Player Matchmaking
  • Party Matchmaking
  • Custom league/tier system (Default is Bronze, Silver, Gold, Plat, Diamond)
  • Allow to matchmake both in parties, and alone.
  • Considers whether owning group is alone or party of how many
  • Considers MMR of whole group
  • Returns MMR of whole opponent group
  • Returns number of players in opponent group
  • Returns array of opponent members name
  • Returns array of opponents actual rank
  • Website to allow you to monitor games/players/accounts

Why do I need this?

Currently, the only way to implement custom match making for UE4 games is to integrate some sort of 3rd party backend system. There are 3 options for this, PlayFab, GameSparks, and Photon. I’ve used both PlayFab and Photon before. PlayFab’s matchmaker is only for dedicated servers, and their matchmaking system offers the barebones of matchmaking in which you have to spend a lot of time and effort to customize yourself.

Photon is a backend system that is more geared towards Unity than Unreal, and is a pain to integrate into UE4. Their matchmaking system is geared towards the concept of lobbies and rooms. It also doesn’t provide a league/MMR based matchmaking system out of the box, and again, requires a lot of customization to do so. As for GameSparks, I haven’t used it before but I would imagine it’s not to different from Photon or PlayFab.

My plugin is geared towards providing an out-of-the-box solution for if you need a MMR/league based matchmaking system for your game. I will provide blueprint functions and C++ implementations that are easily usable and customizable yourself so that you can extend features if you want.

How it works

As with all custom matchmaking systems for UE4, a custom online subsystem will be created as part of the plugin. On the backend, a nodejs Server will be running as the match making server, and directly handling requests from your UE4 clients. When you create an account, or requests to matchmake, or login or anything else, you will be making a request to the match making server. The match making server will perform some algorithms, and then will tell you who your opponents are, and their rank information and such. Even though account names are unique, the match making server also provides unique IDs for each player as well.

The match making server returns the list of account names that should play together, so on your end, if you associate the account names or unique IDs with the IP address of players, you can easily create a list of IP addresses that can connect and join the map together.

Additionally, the backend will also provide persistant data storage. This includes rank, account name, tier, password, email or anything you may need. The plugin will easily provide you the functionalities for retrieving and storing persistant data.

The matchmaking server will provide the ability to matchmake as a party or solo. If in a party, the average MMR of the party will be used, and match making will prioritize playing against other parties instead of solo players.

How would I use this plugin?

An example project/game will be provided upon release. Tutorial and documentation will also be provided. If you want to use the out of the box league system, there will be little to no changes needed from the example project. If you would like to customize yourself, you will need to refer to the tutorial and documentation. For further help you can contact me directly.

I want to use Blueprints/C++, can I do that?

You would be able to do everything you need in both blueprints and C++. If you want to make major customizations you will need C++ (Changing how API calls are made, how parties are created, any changes in the OSS). If you are making smaller ones (customizing MMR and leagues), you only need Blueprint.

Do you provide server hosting?

I do not provide any type of server hosting. I will only provide the match making service that runs on my own nodejs server. How you connect your players is up to you. You can use a dedicated server or P2P system, both should work with the match making service.

Examples

Note: This plugin is still in early stages of development. All of the below screenshots are mock-ups. All of these are subject to change

The plugin will provide both a website to allow you to monitor games/accounts/players, in addition to providing you actual UE4 functionalities. It is easy to create an account, or the player’s MMR:

Once you create the players, you will be able to see it on the website:

You can also get the created player’s rank, whenever you need to:

You can also view the current leagues. Who are in it, how many points they have, and whether they are about to be promoted/relegated:

Finally, you can matchmake. Here I created 2 parties of 3 players to match make:

Once parties are created, you can see them updated on the website. Then you can start the game:

If you would like to subscribe to updates this plugin, feel free to follow my twitter for this plugin at https://twitter.com/clubbabledev.
I’ll be posting frequent updates to both this post, and my twitter account.

2 Likes

This sounds awesome.
Super keen!

Thanks gozu! I’ll be adding more updates to this post and my twitter as I make more progress on this plugin

This coupled with Gamelift could be huge :smiley:

Gamelift would definitely be usable with this plugin. This plugin should be usable with whatever way you plan to connect your players together, whether it’s through Steamworks, GameLift, or peer-to-peer or dedicated server.

I’ve made pretty good progress over the last week or so. I’ll give a thorough update of what is done so far sometime late next week or early the week after next week.

Sounds really interesting. Would love to see this working with Gamelift (or whatever) and how to make it run with it exactly (working on my first mp and never did it before, expect some lan stuff for testing) The rank system also looks really interesting good job man!

subscribed, very interested in a solution for matchmaking

HI, is this still developing?

Shame it seems development has stopped for this - I would love to see something like it