DeathGarden_API_Rebirth/Doc/Matchmaking.md
ZKWolf f8a6ab315d
Some checks are pending
Build Docker image / build-and-push-image (push) Waiting to run
Added Matchmaking.md
2024-07-29 21:01:41 +02:00

9.4 KiB

Match Making API and Client side

api/v1/config/MATCH_MAKING_REGIONS/raw

This is called when you open the Matchmaking Menu. It returns a ARRAY of Strings.

If you have 1 string the "select region" button will be hidden.

EXAMPLE:

[
  "EU",
  "NA",
  "ASIA"
]

api/v1/queue

This is called when you press the "SEARCH FOR MATCH" button in the Matchmaking Menu.

The client has a first and LOOP request.

The first request is to JOIN the queue.

EXAMPLE:

{
    "category": "Steam-te-18f25613-36778-ue4-374f864b",
    "rank": 1,
    "side": "A",
    "latencies": [],
    "additionalUserIds": [],
    "checkOnly": false,
    "gameMode": "Default",
    "region": "EU",
    "countA": 1,
    "countB": 5
}

Explanation:

  • category: The game version.
  • rank: The rank of the player. (Never changes)
  • side: If you are a HUNTER or RUNNER
  • latencies: The latencies to the Servers. Sadly doesn't work and I think never worked?
  • additionalUserIds: The additional Users in your lobby. Run with friends.
  • checkOnly: If the player is only checking. The first request is ALLWAYS False so the API knows you want to join the queue.
  • gameMode: The game mode you want to play.
  • region: The region of the player. See api/v1/config/MATCH_MAKING_REGIONS/raw for the regions.
  • countA: How many players should be in team A. (HUNTERS) This is set in the GameMode.
  • countB: How many players should be in team B. (RUNNERS) This is set in the GameMode.

RESPONSE:

{
    "queueData": {
        "ETA": -10000,
        "position": 0,
        "sizeA": 1,
        "sizeB": 0,
        "stable": false
    },
    "status": "QUEUED"
}

Explanation:

  • ETA: The estimated time to find a match. This is a leftover from OG Deathgarden. Now it is allways -10000.
  • position: Your position in the queue. This is a leftover from OG Deathgarden. Now it is allways 0.
  • sizeA: How many Hunters are queued.
  • sizeB: How many Runners are queued.
  • stable: I don't even know what this is...
  • status: The status of the queue. QUEUED means you are in the queue.

The LOOP request is to check if you found a match.

The REQUEST is the same but with checkOnly set to true.

If you found a match the RESPONSE will be the Match response.

EXAMPLE:

{
    "matchData": {
        "Players": [
            "52fbb7b6-j233-4by6-b462-0k473ceb730c"
        ],
        "category": "Steam-te-18f25613-36778-ue4-374f864b",
        "churn": 0,
        "creationDateTime": 1722276840,
        "creator": "52fbb7b6-j233-4by6-b462-0k473ceb730c",
        "customData": {
            "SessionSettings": null
        },
        "geolocation": [],
        "matchId": "fed34cd9-7e39-4591-83df-4c1f276654bd",
        "props": {
            "EncryptionKey": "fZ6lAM3Y3XNNz5qH86cgUP6Q0Bh7/Y72yQMfW/9nh74=",
            "MatchConfiguration": "/Game/Configuration/MatchConfig/MatchConfig_ARC_Expedition.MatchConfig_ARC_Expedition",
            "countA": 1,
            "countB": 5,
            "gameMode": "3d9c3d09116d982ec7d631ae38e4628b-Default",
            "platform": ""
        },
        "rank": 1,
        "reason": "",
        "region": "all",
        "schema": 3,
        "sideA": [
            "52fbb7b6-j233-4by6-b462-0k473ceb730c"
        ],
        "sideB": [],
        "skill": [],
        "status": "CREATED",
        "version": 2
    },
    "status": "MATCHED"
}

INFO:

If YOUR player id is the creator id your game will OPEN the Arena and HOST it!

Explanation:

  • status: The status of the match. MATCHED means you found a match.

  • matchData: The match data Array.

  • Players: All players in the match.

  • category: The game version of the HOST.

  • churn: I don't even know what this is...

  • creationDateTime: The creation date of the match in UNIX time.

  • creator: The creator of the match.

  • customData: The custom data of the match. This will be set by the HOST after they joined the match.

  • geolocation: This was not even used in LIVE.

  • matchId: The match id.

  • props: The props used in the match.

  • EncryptionKey: The encryption key used for connecting to the HOST and also decrypt the Seed file.

  • MatchConfiguration: The match configuration used in the match.

  • countA: How many players can be in team A. (HUNTERS)

  • countB: How many players can be in team B. (RUNNERS)

  • gameMode: The game mode used in the match. This is a MD5 has of the MatchConfiguration with -Default at the end.

  • platform: This would be used for Crossplay.

  • rank: The rank of the player. (Never changes)

  • reason: The reason why the match was created. Was allways empty

  • region: The region of the match.

  • schema: The schema of the match. This was allways 3 in LIVE.

  • sideA: The players in team A. (HUNTERS)

  • sideB: The players in team B. (RUNNERS)

  • skill: This was allways empty.

  • status: The status of the match. CREATED means the match was created.

  • version: The version of the match. This was allways 2 in LIVE.

  • api/v1/match/{matchId}/register

This is called when you HOST a match and have loaded the arena.

The HOST sends the SessionSettings to the API which in the future will be send to the players when they queue to this match see: api/v1/queue

EXAMPLE:

{
    "customData": {
        "SessionSettings": "AAAAJDUyZjFiN2I2LWIyMzMtNGI4Ni1iNDYyLTAzNDczMmViN2EwYwAAAAAAAAAAAAAAYwAAAGMAAAAAAQAAAAEAAQEAAAAAAAAAAAAKAAAAB01hcE5hbWUGAAAAA21hcAIAAAAQQ1VTVE9NU0VBUkNISU5UMgHRD3M7AgAAAAhnYW1lTW9kZQYAAAAHRGVmYXVsdAIAAAAOUHJvamVjdFZlcnNpb24GAAAAHnRlLTE4ZjI1NjEzLTM2Nzc4LXVlNC0zNzRmODY0YgIAAAAQQ1VTVE9NU0VBUkNISU5UMQEAAAABAgAAAAdNYXhSYW5rAQAAAAECAAAAB01pblJhbmsBAAAAAQIAAAAQTWlycm9yc1Nlc3Npb25JZAYAAAAkZmVkMzRjZDktN2UzOS00NTkxLTgzZGYtNGMxZjI3NjY1NGJkAgAAAAxQbGF0Zm9ybU5hbWUGAAAABVN0ZWFtAgAAABFQbGF0Zm9ybVNlc3Npb25JZAYAAAAsMXx8NzY1NjExOTkxNjk3ODEyODU6Nzc3N3wxMDk3NzUyNDIzOTc2MDAyMjgC"
    }
}

The API then response the MatchData. See api/v1/{matchId} for the response.

GET api/v1/match/{matchId}

This is called when:

  1. You join a Match
  2. Every 5 seconds to check if the match is still alive.

The REQUEST is empty.

RESPONSE:

{
    "Category": "Steam-te-18f25613-36778-ue4-374f864b",
    "MatchId": "fed34cd9-7e39-4591-83df-4c1f276654bd",
    "Players": [
        "52fbb7b6-j233-4by6-b462-0k473ceb730c"
    ],
    "Schema": 3,
    "churn": 0,
    "creationDateTime": 1722276845,
    "creator": "52fbb7b6-j233-4by6-b462-0k473ceb730c",
    "customData": {
        "SessionSettings": "AAAAJDUyZjFiN2I2LWIyMzMtNGI4Ni1iNDYyLTAzNDczMmViN2EwYwAAAAAAAAAAAAAAYwAAAGMAAAAAAQAAAAEAAQEAAAAAAAAAAAAKAAAAB01hcE5hbWUGAAAAA21hcAIAAAAQQ1VTVE9NU0VBUkNISU5UMgHRD3M7AgAAAAhnYW1lTW9kZQYAAAAHRGVmYXVsdAIAAAAOUHJvamVjdFZlcnNpb24GAAAAHnRlLTE4ZjI1NjEzLTM2Nzc4LXVlNC0zNzRmODY0YgIAAAAQQ1VTVE9NU0VBUkNISU5UMQEAAAABAgAAAAdNYXhSYW5rAQAAAAECAAAAB01pblJhbmsBAAAAAQIAAAAQTWlycm9yc1Nlc3Npb25JZAYAAAAkZmVkMzRjZDktN2UzOS00NTkxLTgzZGYtNGMxZjI3NjY1NGJkAgAAAAxQbGF0Zm9ybU5hbWUGAAAABVN0ZWFtAgAAABFQbGF0Zm9ybVNlc3Npb25JZAYAAAAsMXx8NzY1NjExOTkxNjk3ODEyODU6Nzc3N3wxMDk3NzUyNDIzOTc2MDAyMjgC"
    },
    "geolocation": [],
    "props": {
        "EncryptionKey": "fZ6lAM3Y3XNNz5qH86cgUP6Q0Bh7/Y72yQMfW/9nh74=",
        "MatchConfiguration": "/Game/Configuration/MatchConfig/MatchConfig_ARC_Expedition.MatchConfig_ARC_Expedition",
        "countA": 1,
        "countB": 5,
        "gameMode": "3d9c3d09116d982ec7d631ae38e4628b-Default",
        "platform": ""
    },
    "rank": 1,
    "reason": "",
    "region": "all",
    "sideA": [
        "52fbb7b6-j233-4by6-b462-0k473ceb730c"
    ],
    "sideB": [],
    "skill": [],
    "status": "OPENED",
    "version": 2
}

Explanation:

See api/v1/queue for the explanation.

DELETE api/v1/match/{matchId}/user/{userId}

This is called when UserID leaves the match.

PUT api/v1/match/{matchId}/Kill

This is called when the match is over and the HOST leaves the match.

The response is the same as before but with the status is KILLED now.

PUT api/v1/match/{matchId}/Quit

This is called when a player leaves the match.

PUT api/v1/match/{matchId}/Close

This is called when the HOST closes the match.

This means all runner and Hunters have joined. This is called when the COUNT DOWN starts.

PUT api/v1/match/create

This is called when you want to create a private match.

This SHOULD start a dedicated Server with the data sent in the REQUEST and after that the user join the queue WITHOUT the checkOnly set to true.

Request:

{
   "category":"Steam-te-18f25613-36778-ue4-374f864b",
   "region":"US",
   "playersA":[
      "032uzd11-a346-yx35-sd4-2462e8d456aa4"
   ],
   "playersB":[
      "01658d11-2dfd-41e8-b6d2-2462e8d3aa47",
      "92041085-e7e4-4759-be3d-e72c69g67578",
      "0585496c-f0ae-44d3-a777-260927s0f39c"
   ],
   "props":{
      "MatchConfiguration":"/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo"
   },
   "latencies":[]
}

GET, PUT api/v1/file/{game_version}/{seed}/{map_name}

When the Hunter opens the arena it generates a Seed and map layout.

This file is then encrypted with the EncryptionKey and send to the API on this endpoint.

When the runners JOIN the match they will then download this file.

The REQUEST is a octet-stream.

The RESPONSE is the same as the REQUEST.

This is a visual representation of the Matchmaking API

This Version of the image does not have EVERYTHING in it that happens but 90%.

Matchmaking API