Matchmaking
The Zero-K Matchmaker allows players to automatically find a game with other similarly skilled players to participate in. This solves the problem of highly rated individuals being disappointed by having to fight with newbies on their team.
Introduction
The Matchmaker can be found in the Multiplayer tab of most lobbies. The player will be presented with a list of possible game types to play, as well as a short description of these.
After selecting the preferred gametype(s), the player can freely join rooms or spectate battles until a game is found. If he decides to play in a custom battle, he will simply be removed from the Matchmaking queue without any further penalties.
Once a match has been found, the player will be informed both visually and audibly by a pop-up, asking him to confirm that he is going to play this game. Once the match has been accepted by all players, the game will be started on a randomly selected map from the game type specific map pool. Should one of the other players not accept the game, the searching player will be put back into the Matchmaking, until another game is found. If no response is made within 30 seconds or the request is denied, the player will be removed from the queue. Furthermore, ignored or denied requests will lead to a five minute exclusion from Matchmaking.
Algorithm
Once a player has joined a queue, the Matchmaker will continuously look for other players to pair him with. Each player is assigned a maximum rating span within which both his teammates and opponents have to lie. This span is progressively widened while the player is waiting, up to a maximum width. If there are enough players within rating range, the Matchmaker will choose the nearest ones and ask them to accept the match. If all players accepted, they will be assigned a map and a room and removed from all queues. Otherwise the Matchmaker will continue to look for possible games after the declining players have been removed from the queue.
Parties
In the future, players will be able to group up with their friends to join a game in the same team. This system is not yet implemented.
Debug data:
[SQLBagOStuff] MainObjectStash using store ReplicatedBagOStuff
[objectcache] MainWANObjectCache using store EmptyBagOStuff
IP: 3.137.183.239
Start request GET /mediawiki/index.php?oldid=1168&title=Matchmaking
HTTP HEADERS:
CONTENT-TYPE:
CONTENT-LENGTH: 0
USER-AGENT: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HOST: zero-k.info
COOKIE: wikidb229_mw__session=on2h1j21chli0rbl2457kg93ncnpneps
ACCEPT-ENCODING: gzip, br, zstd, deflate
ACCEPT: */*[localisation] LocalisationCache: using store LCStoreDB
[session] SessionManager using store SqlBagOStuff
[session] Session "on2h1j21chli0rbl2457kg93ncnpneps" requested without UserID cookie
[DBReplication] Cannot use ChronologyProtector with EmptyBagOStuff
[DBReplication] Wikimedia\Rdbms\LBFactory::getChronologyProtector: request info {
"IPAddress": "3.137.183.239",
"UserAgent": "Mozilla\/5.0 AppleWebKit\/537.36 (KHTML, like Gecko; compatible; ClaudeBot\/1.0; +claudebot@anthropic.com)",
"ChronologyProtection": false,
"ChronologyPositionIndex": 0,
"ChronologyClientId": false
}[DBConnection] Wikimedia\Rdbms\LoadBalancer::lazyLoadReplicationPositions: executed chronology callback.
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
Title::getRestrictionTypes: applicable restrictions to [[Matchmaking]] are {edit,move}
[ContentHandler] Created handler for wikitext: WikitextContentHandler
[MessageCache] MessageCache using store SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] SqlBagOStuff::lock failed due to timeout for wikidb229-mw_:messages:en.
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[MessageCache] MessageCache::load: Loading en... local cache is empty, global cache is expired/volatile, loading from database
ParserFactory: using preprocessor: Preprocessor_Hash
Unstubbing $wgLang on call of $wgLang::_unstub from ParserOptions->__construct
[caches] parser: SqlBagOStuff
Article::view using parser cache: no
Article::view: doing uncached parse
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #126 (handle id #120) will be used for SqlBagOStuff
Parser cache options found.
[Preprocessor] Cached preprocessor output (key: wikidb229-mw_:preprocess-hash:84358d7fcdb4953c8dc0d2af71756e87:0)
[Mime] MimeAnalyzer::loadFiles: loading mime types from C:\Projekty\zero-k.info\www\mediawiki\includes/libs/mime/mime.types
[Mime] MimeAnalyzer::loadFiles: loading mime info from C:\Projekty\zero-k.info\www\mediawiki\includes/libs/mime/mime.info
File::transform: Doing stat for mwstore://local-backend/local-thumb/9/9b/MMQueues.png/632px-MMQueues.png
[FileOperation] FileBackendStore::ingestFreshFileStats: File mwstore://local-backend/local-thumb/9/9b/MMQueues.png/632px-MMQueues.png does not exist
TransformationalImageHandler::doTransform: creating 632x403 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_2ce2e17ee905.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
File::transform: Doing stat for mwstore://local-backend/local-thumb/9/9b/MMQueues.png/632px-MMQueues.png
TransformationalImageHandler::doTransform: creating 632x403 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_6110bd96700d.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
File::transform: Doing stat for mwstore://local-backend/local-thumb/9/9b/MMQueues.png/632px-MMQueues.png
TransformationalImageHandler::doTransform: creating 632x403 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_2cccf4f5ed88.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
File::transform: Doing stat for mwstore://local-backend/local-thumb/c/c2/AreYouReady.png/344px-AreYouReady.png
[FileOperation] FileBackendStore::ingestFreshFileStats: File mwstore://local-backend/local-thumb/c/c2/AreYouReady.png/344px-AreYouReady.png does not exist
TransformationalImageHandler::doTransform: creating 344x157 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_d4da32492941.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
File::transform: Doing stat for mwstore://local-backend/local-thumb/c/c2/AreYouReady.png/344px-AreYouReady.png
TransformationalImageHandler::doTransform: creating 344x157 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_bd8a13e03c03.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
File::transform: Doing stat for mwstore://local-backend/local-thumb/c/c2/AreYouReady.png/344px-AreYouReady.png
TransformationalImageHandler::doTransform: creating 344x157 thumbnail at C:\Windows\TEMP\mwtmp-IUSR/transform_435291de13a1.png using scaler im
TransformationalImageHandler::doTransform: returning unscaled image
[Preprocessor] Cached preprocessor output (key: wikidb229-mw_:preprocess-hash:84358d7fcdb4953c8dc0d2af71756e87:0)
MediaWiki::preOutputCommit: primary transaction round committed
MediaWiki::preOutputCommit: pre-send deferred updates completed
MediaWiki::preOutputCommit: session changes committed
MediaWiki::preOutputCommit: LBFactory shutdown completed
Title::getRestrictionTypes: applicable restrictions to [[Matchmaking]] are {edit,move}