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 toGetSingleton
. Right now the only accepted option isDisableRatingSystem
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.
That is amazing, thank you so much for everything you’re doing for the community. We really appreciate all the hard work!
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.
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!
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
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.
Great, thanks for the info 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
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!!
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 replacedSetGamePlace
.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 argumentsPlayer
,Map
,RatingType
,RoundedRating
. - [Change]
PlayerRemovedFromQueue
will now fire with the argumentsPlayer
,Map
,RatingType
,RoundedRating
. - [Change]
SetStartingDeviation
has been renamed toSetStartingStandardDeviation
- [Change]
GetPlayerGlickoId
has been renamed toGetPlayerRatingId
. It now returns an OpenSkill object. To get a rating number from this, useMatchmakingService:ToRatingNumber(openSkillObject)
. - [Change]
GetPlayerGlicko
has been renamed toGetPlayerRating
. It now returns an OpenSkill object. To get a rating number from this, useMatchmakingService:ToRatingNumber(openSkillObject)
. - [Change]
SetPlayerGlickoId
has been renamed toSetPlayerRatingId
. Its third parameter is now an OpenSkill object, rather than a glicko object. - [Change]
SetPlayerGlicko
has been renamed toSetPlayerRating
. Its third parameter is now an OpenSkill object, rather than a glicko object. - [Change]
GetQueue
now takesmap
as an argument instead ofratingType
. It will now return in the format{ratingType: {skillLevel: queue}}
wherequeue
is a table of tables{userId, partyMembersAfter}
- [Change]
QueuePlayerId
now requires a third argumentmap
which is a map name that is the same as one added withAddGamePlace
. - [Change]
QueuePlayer
now requires a third argumentmap
which is a map name that is the same as one added withAddGamePlace
. - [Change]
QueuePartyId
now requires a third argumentmap
which is a map name that is the same as one added withAddGamePlace
. - [Change]
QueueParty
now requires a third argumentmap
which is a map name that is the same as one added withAddGamePlace
. - [Change]
UpdateRatingsId
's arguments have been completely changed. It now takes the argumentsratingType
,ranks
,teams
. WhereratingType
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 argumentsratingType
,ranks
,teams
. WhereratingType
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 parametermap
which is the name of the map they queued for. - [Change]
SetPlayerInfo
now has a fifth parametermap
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!
Oh, let’s goo!! This is gonna be absolutely crazy! This’ll help my game soo much! Thanks!
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
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 amap
name as its first argument. Player range is now per map.
Changes (non-breaking):
- None
Fixes:
- None
An early version of the revamped documentation is now available!
It applies to version 4.1.0.