mirror of
https://github.com/wolfswolke/DeathGarden_API_Rebirth.git
synced 2026-03-21 17:54:09 -05:00
Added Matchmaking.md
Some checks are pending
Build Docker image / build-and-push-image (push) Waiting to run
Some checks are pending
Build Docker image / build-and-push-image (push) Waiting to run
This commit is contained in:
parent
683be90c2b
commit
f8a6ab315d
294
Doc/Matchmaking.md
Normal file
294
Doc/Matchmaking.md
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
# 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:
|
||||
|
||||
```json
|
||||
[
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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%.
|
||||
|
||||

|
||||
Loading…
Reference in New Issue
Block a user