local Match = require(path.to.Match)
-- // Start matchmaking loops
Match:StartMatchmaking()
-- // Queue a player with an optional ELO parameter (Player, Mode, SubMode, ELO?)
Match:QueuePlayer(player, "Ranked", "1v1", 1200)
-- // Bulk queue multiple players (all in the same mode/submode, optional shared ELO)
Match:QueuePlayer({player1, player2, player3}, "Ranked", "2v2", 1300)
-- // Stop the queue of a player
Match:StopQueue(player)
-- // Bulk stop the queue of multiple players
Match:StopQueue({player1, player2, player3})
-- // Stop matchmaking loops
Match:StopMatchmaking()
QueueManager.generatePlayerQueueData writes JoinTime in ms but MatchmakingEngine:IsGroupValid does seconds math. so waitTime just goes “0 lol” and the ELO spread never opens up.
MatchmakingEngine:FindOptimalPlayerGroup never sorts playersInContinent before FindBestGroup. FindBestGroup assumes sorted ELO cuz it peeks at first/last values. spread math is totally bogus per continent.
QueueManager:GetQueuedPlayers just raw JSONDecode(entry.value) no pcall lol one bad entry nukes the loop.
same for GetPlayerJoinTime no pcall, no survivors.
MatchmakingEngine:LockAllPlayers overwrites existing locks like “yeah whatever”. stolen locks everywhere.
ProcessPlayerRemoval adds to playersByServer even when RemoveAsync fails. so yeah you’re teleporting ghosts now.
CreateCrossServerMatch deletes from queue before telling servers. if NotifyServersOfMatch dies, gg players just vanish.
HandleTeleportRequest thinks pcall = everyone made it. some didn’t. they’re still locked. rip.
RequestCrossServerMatchmaking fires on every matchmaking tick. plus the loop. messaging service getting absolutely hammered no cooldown in sight.
StopQueue splits queueKey with (.+)_(.+) like that’s safe. underscore in mode? lmao enjoy deleting the wrong queue.
QueueManager:Cleanup clears cache but not localQueueCounts. congrats on your immortal stale counts.
RunHeartbeat checks tick() every frame. unnecessary cardio.
_lockMap exists but no one calls it. ghost data, dead vibes.
mixed ms and sec times all over. sorting kinda works but time math is straight chaos.
message payload casing all over the place Mode, SubMode, PLACE_ID, camelCase pick a side lmao
FindBestGroup hard caps at 50 iterations. massive queues? lol guess half of them never get a look.
UpdateLocalQueueCount just believes whatever ServerId says even if it’s ancient. local counts drift into the abyss.
QueuePlayer writes keys before SetAsync, if that fails it cleans half the mess and leaves empty tables. messy leaks.
SendQueueStatus hides players if they’re offline. stealth queues. ghost town lookin clean tho.
NotifyServersOfMatch fails? just unlocks. no restore. players gone forever. shrug.
MatchMake sets _data.isProcessingMatch[queueKey] = false after the pcall but if anything explodes earlier, that flag stays true till the heat death of the server.
GetQueuedPlayers and CollectPlayers only grab first batchSize entries. the rest? lol invisible. matchmaking just pretending they don’t exist.
Thanks, i’ll take a look when I get the time. Although some of these look wrong or just nitpicks
e.x. “message payload casing all over the place Mode, SubMode, PLACE_ID, camelCase pick a side lmao”; I use different naming for the data they hold.
e.x. “GetQueuedPlayers and CollectPlayers only grab first batchSize entries. the rest? lol invisible. matchmaking just pretending they don’t exist.”. Not really a bug, just how the batching works, i’ll probably change this to a setting.
I should have added that I published the place, turned on API, and HTPP… in security… so those were on…
I did not modify any of the code, if I need to add a teleport place ID… but I would have thought it would have errored out if I did not do that…and or the timer would have stop when if it tried to teleport
excellent thanks! I am working on getting Rojo working on it and the Rojo plug in and will get back to you.
Also using the paid ChatGPT to assist with understanding the codes, initially it was says some remoteevents were missing, but I will see what is in the new one.
Hello, @MasterPotBoi. I’ve used your module in the test place (rbxl), and I really like it! I believe it’s beneficial, and I plan to incorporate it into my game. However, I have a few suggestions.
Firstly, could you add a “FinishMatchmaking” function? For example, when a match is found during the search, the module should call “FinishMatchmaking”. This would allow me to connect to FinishMatchmaking via event or whatever and inform the players that they are being teleported.
Secondly, I think utilizing a signal or network library would be beneficial. It’s much more useful and optimized. Thank you!
@MasterPotBoi, if I were to create a party system that allows players to invite others, would you run the function Match:QueuePlayer({player1, player2, player3}, selectedHostRankName, selectedHostModeName, selectedHostRankName == "Ranked" and 1300 or 0) when you press “Start,” or when a player accepts an invitation?
Additionally, I have another idea. We could use PartyId = Match:GetID({player1, player2, player3}), followed by Match:StartParty(PartyId).