geordie avatar image
geordie asked

Matchmaking with parties/multiple local players

Hi there,

I'm pretty sure I submitted a question a few days ago, but now that I look at my profile it isn't showing up, so will try again (but feel free to remove either one if it's a dupe).

I've been looking through the Playfab docs, and am impressed with how cohesive and complete it seems to be (especially the engine plugins). The crossplatform linking of accounts seems particularly interesting.

That being said, there were a few things I couldn't find much info about/fear aren't super possible, and was wondering if you had any advice or other customers doing similar things.

We're hoping to get a party system working similar to Overwatch, where you can invite friends to a party/group, and then you can matchmake together (usually the party leader matchmakes for all members then passes the necessary info to them once a match is found).

We also want to support multiple local players, so you could have say 2 people on one machine (it's a top-down shared screen game).

From what I can see there isn't a great way to specify that you want to matchmake for multiple players at once, or a way to reliably reserve slots in a server after a match is found.

Would we need to write our own matchmaker and hook into the Playfab APIs to get that sort of behaviour? Or do you have anything on the roadmap that'd help?

We've been trialling GameLift and their FlexMatch matchmaker, and were wondering if you guys supported any kind of integration there (I know you both do similar things, so I don't expect it's a priority. But just thinking maybe someone could use Playfab for friends, save data, achievements etc. and then GameLift for matchmaking and server hosting).

The way that players actually get into a party is a separate problem, but if you had any ideas on easy ways to implement that in Playfab then that'd also be helpful :) Not sure if we'd need to do something per platform (like using Steamworks lobbies on Steam, the equivalent on Xbox etc.), or if something like Playfab's Shared Group Data features could work (I've seen you guys discouraging frequent API calls to that though).

A few other misc questions too if you don't mind:

- is the indie pricing a flat rate including hosting of dedicated servers? or are they extra and billed based on hourly EC2 usage (up until you reach the max MAU)

- if a player has linked their eg. steam and xbox accounts to their anonymous playfab id, are they able to see their xbox friends list while playing on steam?

Sorry if that's a lot, and am happy to clarify anything I was unclear about!


Shared Group DataMatchmaking
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

geordie avatar image geordie commented ·

Also damn, looks like it collapsed my multiple line breaks. Apologies for wall of text.

0 Likes 0 ·
geordie avatar image geordie commented ·

Oh and one more question - can you have both the client and server UE4 plugins in the one project? Even if they're compiled out based on the Server/NoEditor targets etc. Splitting the game out into two separate projects doesn't seem very viable

0 Likes 0 ·

1 Answer

brendan avatar image
brendan answered

Yes, shared group data is intended for a fairly limited set of scenarios in which you're sharing data that is only updated infrequently between a small number of players. It was built for sharing data between players in non-realtime turn-based games.

For your matchmaker question, our matchmaker is a very simple one - it allows you to search for a matching session with an open slot using a number of filters (region, game mode, custom server tags, skill statistic, etc.), and returns the best one found. To create a party-based matchmaking system, two approaches would be:

1. Write your own matchmaker, using the Matchmaker API.

2. Use GetCurrentGames to get the list of sessions, randomly select one with sufficient open slots and request to join it, or send out requests to multiple servers at once, and coordinate on which one you choose (otherwise, pick another without re-querying if the first one fails - if you run out of options, start a new server and wait for others to join it).

In either case, you'd need to have your server set up to have the join request contain the number of slots required.

But no, we're not planning an integration with FlexMatch at this time.

Pricing: No, custom game server hosting is priced at the EC2 rate, as stated in the Multiplayer->Servers tab. Those are servers that are dedicated 100% to your title - it would not be possible for us to "eat" those costs. But they're also not a profit center for us as we pass on the costs directly, with a 10% markup to cover our expenses.

Steam/Xbox: We're not integrated with the Xbox friends system, so you'd need to query Xbox directly. But for any questions on cross-service behavior like this, you need to make sure you comply with the platform owner's policies.

Client/Server APIs in one UE4 project: You can, but we'd advise against it. Any risk of accidentally leaking your Secret Key to players is too great of a risk.

10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

geordie avatar image geordie commented ·

Thanks for the quick response!

Sounds like most stuff was as expected then :)

Re: Secret key being leaked - would it be possible for the server to read the secret from an environment variable on the server instance (which is spun up by Playfab) rather than embedding it in the project? That way it wouldn't even need to be in your repo

0 Likes 0 ·
brendan avatar image brendan geordie commented ·

Sure, if you're using our server hosting, one of the default command line parameters is title_secret_key, in fact. So yes, if you only ever get it from there, and never include it anywhere in the server project, you should be good.

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.