[v2.1.0] MatchmakingService - ON HOLD

Sure, I would love to talk to you on discord. You can add me at SkeletorAngel#7886

awesome i was making one too but your is better for internal use
a cool feature will be like SetPlayerRange per Rating type and PlaceId too

Multiple places and rating types for each places is planned, but it will take a small rewrite of some of the base code so I haven’t gotten to it yet. I’m still working on the new docs.

I changed your code but I don’t know if it will be optimized
QueueSettings = {[“ranked”] = {range = NumberRange(), Placid = :number}}

At line 375…

Service.PlayerRange = NumberRange.new(QueueSettings[mem.ratingType].Range.Max,…)

And I change placed in the code loops

If you wish to have your code changes implemented into the service, please fork the project on github and open a pull request GitHub - steven4547466/MatchmakingService. This makes version control and rollback easier.

I’ve released an update that allows you to disable the rating system entirely!

Version 3.4.0-beta
Changes (breaking):

  • None

Changes (non-breaking):

  • [Addition] Added an options table to GetSingleton. Right now the only accepted option is DisableRatingSystem which will disable the rating system, disable profile service, and everyone will be in the same queue pool.

Fixes:

  • None

To disable the rating system, when you call GetSingleton, add {["DisableRatingSystem"]=true} into the parameters so it looks like this: GetSingleton({["DisableRatingSystem"]=true}). Make sure you do this on any place where you use GetSingleton in hub servers and game servers

Editing in a small patch:
Version 3.4.1-beta

Changes (breaking):

  • None

Changes (non-breaking):

  • None

Fixes:

  • [Fix] Fixed an issue where you would get an error while queueing a player or party with the rating system disabled.

EDIT: So I’m pretty busy right now, but I’m doing a big change to this service that will improve everything for everyone. This will include:

  • Removing ProfileService entirely and just using datastores directly (this will completely get rid of wait time exceeded issue)
  • Switching from glicko-2 (which has a few issues with farming volatility) to OpenSkill.
  • Multi-place support
  • A data folder of some sort that will replicate after teleporting to the game server.
2 Likes

That is amazing, thank you so much for everything you’re doing for the community. We really appreciate all the hard work! :grinning:

1 Like

Thanks! I do have a really big update planned, but I’m doing my finals for college so that should come sometime after the 15th which is the last day of my semester. It will fix some long standing issues and add capabilities that I’ve wanted to add for a while like supporting multiple places and getting rid of ProfileService.

4 Likes

Really looking forward to that, multiple places will be an awesome edition along with the other new capabilities. Again, thank you so much for what you’re doing for the community.
But right now: good luck on your finals - a talented guy like you will absolutely kill that exam! :grin:

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