[v2.1.0] MatchmakingService - ON HOLD

This is amazing! I have a few questions about the system though.

Do you think you will consider more than 2 teams for ranked matches?
Is there a way to access the ranking data so we can maybe put a leaderboard or something?
What other parameters other than “ranked” are there for queueing ? Can we like customize how a different gamemode (like “draft”, in your example, If we want another type matchmaking)

Definitely will be using this for future projects, and thanks for the time and effort you have put into this :slight_smile:

Next update, yes

You can get their glicko object using GetGlicko, but be warned, next update will remove Glicko, and this function won’t be available anymore. I recommend not doing anything with this until I can update it.

Anywhere where you see the string "ranked" you can actually put any string there. All that does is get separate values from each other which can allow you to have multiple types of gameplay. This is also getting a massive overhaul in the next update.

Basically, you should wait for the next update. The last day of my college semester is tomorrow, so I can work on it after that day. The update will be breaking and not backwards compatible, but it’s going to be for the best. I will be removing the profile service dependency and adding a ton of planned features.

3 Likes

Great, thanks for the info :slight_smile: Can’t wait for the update!

I’ve started writing the update, expect it in a few days, it will be a pretty large breaking update so a lot of stuff will be rewritten

3 Likes

Sometimes I wonder, how don’t I find these types of amazing resources?

Heck the first line I said, but this module is absolutely crazy! 10/10!!

3 Likes

I’ve released MatchmakingService 4.0.0. You can find it here:

Eventually this will be merged into the main model. But this has significant breaking changes so I am giving devs time to update! It will be merged into the main model if it goes 2 weeks with no reported bugs. At that point it will then also be the first full release of the service! Better documentation is coming soon as well!

Version 4.0.0-beta
Changes (breaking):

  • [Addition] OpenSkill has been added in place of Glicko2 for the rating system.
  • [Addition] AddGamePlace(name, id) has replaced SetGamePlace. name is the name of the map, id is the game’s place id. Supports any number of maps.
  • [Addition] SetStartingMean(newStartingMean) has been added.
  • [Addition] ToRatingNumber(openSkillObject) has been added.
  • [Removal] ProfileService has been removed.
  • [Removal] Glicko2 has been removed.
  • [Removal] SetGamePlace has been removed.
  • [Removal] SetStartingRating has been removed (due to how open skill works, this will not be readdedd).
  • [Removal] SetStartingVolatility has been removed.
  • [Removal] GetQueueCounts has been temporarily removed. Will be readded in the future.
  • [Change] Significant changes have been made to the internal queue system.
  • [Change] PlayerAddedToQueue will now fire with the arguments Player, Map, RatingType, RoundedRating.
  • [Change] PlayerRemovedFromQueue will now fire with the arguments Player, Map, RatingType, RoundedRating.
  • [Change] SetStartingDeviation has been renamed to SetStartingStandardDeviation
  • [Change] GetPlayerGlickoId has been renamed to GetPlayerRatingId. It now returns an OpenSkill object. To get a rating number from this, use MatchmakingService:ToRatingNumber(openSkillObject).
  • [Change] GetPlayerGlicko has been renamed to GetPlayerRating. It now returns an OpenSkill object. To get a rating number from this, use MatchmakingService:ToRatingNumber(openSkillObject).
  • [Change] SetPlayerGlickoId has been renamed to SetPlayerRatingId. Its third parameter is now an OpenSkill object, rather than a glicko object.
  • [Change] SetPlayerGlicko has been renamed to SetPlayerRating. Its third parameter is now an OpenSkill object, rather than a glicko object.
  • [Change] GetQueue now takes map as an argument instead of ratingType. It will now return in the format {ratingType: {skillLevel: queue}} where queue is a table of tables {userId, partyMembersAfter}
  • [Change] QueuePlayerId now requires a third argument map which is a map name that is the same as one added with AddGamePlace.
  • [Change] QueuePlayer now requires a third argument map which is a map name that is the same as one added with AddGamePlace.
  • [Change] QueuePartyId now requires a third argument map which is a map name that is the same as one added with AddGamePlace.
  • [Change] QueueParty now requires a third argument map which is a map name that is the same as one added with AddGamePlace.
  • [Change] UpdateRatingsId's arguments have been completely changed. It now takes the arguments ratingType, ranks, teams. Where ratingType is the name of the rating type. ranks is a table of numbers that relate to placements of each team. teams is a table of tables that contain user ids.
  • [Change] UpdateRatings's arguments have been completely changed. It now takes the arguments ratingType, ranks, teams. Where ratingType is the name of the rating type. ranks is a table of numbers that relate to placements of each team. teams is a table of tables that contain players.

Changes (non-breaking):

  • [Change] Queue expansions has been removed for the time being. Will be readded in the future.
  • [Change] SetPlayerInfoId now has a fifth parameter map which is the name of the map they queued for.
  • [Change] SetPlayerInfo now has a fifth parameter map which is the name of the map they queued for.

Fixes:

  • [Fix] Options will now default to {}.

Most of this is understandable from the change log (new documentation will be out on the readme soon), but I wanted to go in more detail to UpdateRatings.

Basically, lets have this scenario in the ratingType ranked:

local team1 = {player1, player2}
local team2 = {player3, player4}
local team3 = {player5, player6}

Let’s say team2 came first, team1 came second and team3 came third. To update the ratings correctly, you would do this:

MatchmakingService:UpdateRatings("ranked", {2, 1, 3}, {team1, team2, team3})

{2,1,3} is important, and so is order. Order is extremely important here. Because I passed the teams in order, I can give the position of each team in order. As previously stated team1 placed second, therefore because team1 is the first team in the teams table, it also has the first value in the rankings table.

When I get time I will update the documentation.

There may be new bugs in 4.0.0 that I did not find in testing. Please let me know of any you see!

7 Likes

Oh, let’s goo!! This is gonna be absolutely crazy! This’ll help my game soo much! Thanks!

1 Like

Since Glicko2 and Profile Service are no longer in use, do we still need to keep the modules?

The new model does not have either of them. Or wasn’t supposed to, I’ll fix that.

Fixed

1 Like

I’ve released 4.1.0. While it is a breaking change I just don’t want to immediately go to version 5.0.0 lol.

Anyways:

Version 4.1.0-beta

Changes (breaking):

  • [Addition] SetPlayerRange now takes a map name as its first argument. Player range is now per map.

Changes (non-breaking):

  • None

Fixes:

  • None
2 Likes

An early version of the revamped documentation is now available!

It applies to version 4.1.0.

https://steven4547466.github.io/MatchmakingService/

4 Likes

New version with a critical bug fix

Version 4.1.1-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed an issue with breaking up the running games resulting in an error.

Adding another one here to not bump

Version 4.1.2-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Prevented runningGamesCount from going to 0 which caused issues.

And again…

Version 4.1.3-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] GetSingleton should no longer yield.
3 Likes

New version with a nice addition and a small fix.

Version 4.2.0-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • [Addition] SetJoinable(gameId, joinable) allows you to explicitly set the joinable state of the game.

Fixes:

  • [Fix] A fix for #10 has been merged.

Updating this reply:

Version 4.2.1-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed an issue that causes players to not be removed from queue when finding a game.
8 Likes

Version 4.2.2-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed an issue that caused party queueing to break.

Tagging along here…

Version 4.2.3-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed an issue that caused the PlayerAddedToQueue event to not fire when queueing a party.

  • [Fix] Fixed an issue that caused QueueParty to always return false.

Remember, this will soon be merged with the main module!

Here’s the update: MatchmakingService Update - Roblox

7 Likes

Version 4.3.0-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • [Addition] Added ApplyCustomTeleportData which is a function you can bind to give users custom teleport data.
  • [Addition] Added ApplyGeneralTeleportData which is a function you can bind to give the game custom teleport data.

Fixes:

  • [Fix] PlayerRemovedFromQueue will now be passed a number as the fourth parameter, instead of its string representation.

You can read up on how to apply and retrieve custom teleport data for users here:
https://steven4547466.github.io/MatchmakingService/maindocs/#applying-custom-teleport-data-to-players

You can read up on how to apply and retrieve general custom teleport game data here:
https://steven4547466.github.io/MatchmakingService/maindocs/#applying-custom-teleport-data-to-the-game

Remember, the update will be merged with the main model soon. You can find the update here already: MatchmakingService Update - Roblox

3 Likes

I’ve readded queue expansions! If all goes well, this will be the version merged into the main model and released!

Version 4.4.0-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • [Readdition] Readded queue expansions.

  • [Addition] Added SetSecondsBetweenExpansion which allows you to set the time between queue expansions. A queue’s are rounded off at every 10 skill level. A single expansion allows players from the next and previous 10 to be matched together. If a player is queued at 10 skill level, a single expansion will look in 0 and 20 as well.

Fixes:

  • None

4.4.1-beta is small so I’m tagging it along in here

Version 4.4.1-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed queue expansions for already running games

Remember, the update will be merged with the main model soon. You can find the update here already: MatchmakingService Update - Roblox

4 Likes

I believe it’s finally stable enough to push into the main module. This also comes with the full release of 1.0.0!

Version 1.0.0

Changes (breaking):

  • None

Changes (non-breaking):

  • [Addition] Added DisableExpansions to the options table when using GetSingleton().

  • [Addition] Added more comments to the code.

Fixes:

  • None

Updates will now mainly consist of patches to fix things that are broken. New features will be available on a beta branch on the github ahead of time for testing.

10 Likes

For some reason I wasn’t receiving notifications when this topic was bumped, now I’m coming back 2 weeks after my last visit - and wow, what a time to be alive!

Thanks so much for making this, again. Best Christmas gift so far! :slight_smile: Can’t wait for more.

Happy new year to everyone reading as well.

3 Likes

I am having problems with the party system, where they are unable to queue up. When I do, “MatchmakingService:QueueParty(players, “unranked”, “2v2”)” it does not give any errors. For the argument “players”, I pretty much set a table which contains the players in the party. “2v2” is the name of the map that I am trying to teleport the party to. Could you give an example of how to correctly implement doing it with a party, just like how you did for single player queue?

Well, first the function returns a boolean value that indicates whether or not it was successfully queued, can you do print(MatchmakingService:QueueParty(players, "unranked", "2v2")) and show me what it returns? Also, these kinds of things are better resolved in a private message so we don’t constantly bump the topic, send me a private message with the result of the print and I’ll be happy to help!