Web API

From Mania Tech Wiki
Revision as of 10:57, 12 May 2019 by Maxoufox (talk | contribs) (Added goal part.)
Jump to navigation Jump to search

Goal and how to help

One day, eventually, Trackmania will reach his EoL. This is about documenting as much as possible to eventually get the point of having a fully functional custom auth server. If you want to give help, go ahead. Just grab fiddler and start tweaking around with the game.

Basic concepts

TrackMania uses a XML-RPC-like API to authenticate players, load server lists, load rankings, etc... Here is some documentation about what has been reversed engineered. A lot is still left to be documented.

The game sends unencrypted POST requests to

to communicate with the API.

It sets two headers: User-Agent: GameBox and Accept: */*, and uses the following format as request body :

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <game>
    <name>TmForever</name>
    <version>2.11.16</version>
    <distro>MOLUX</distro>
    <lang>fr</lang>
  </game>
  <author>
    <login/>
    <session/>
  </author>
  <request>
    <name>[...]</name>
    <params>
      [...]
    </params>
  </request>
  <auth>
    <value>[...]</value>
  </auth>
</root>

Here is a description of the parameters :

  • root
    • game
      • name the client you are using. Known values: TmForever
      • version Version of the client
      • distro Unknown. Set to MOLUX or TAHOR
      • lang lang of the client, as ISO 639-1
    • author
      • login is not set when calling GetConnectionAndGameParams
      • session is not set when calling GetConnectionAndGameParams
    • request
      • name Name of the requested function.
      • param Parameters for the call.
    • auth Optional. Only seen with Disconnect
      • value Looks like an auth ticket.

The server responds with XML, which has obfurscated names:

<?xml version="1.0" encoding="UTF-8"?>
<r>
  <r>
    <n>[...]</n>
    <c>
      [...]
    </c>
  </r>
  <e>execution time : 0.0010 s</e>
</r>

Here is a description of the return:

  • r
    • r
      • n The name of the called function
      • c The return data
    • e A string giving the execution time.

Functions calls

GetConnectionAndGameParams

First request sent by client.

Session required? Parameters Response
No
  • dedicated Set to 0 with TMF. Purpose is unknown. Maybe for servers.
  • download Max P2P download speed, as set in game config, in B/s
  • upload Max P2P upload speed, as set in game config, in B/s
  • a
    • b Full game name (Set to "Trackmania United Forever" for TMNF and TMUF)
    • c Set to "game.trackmaniaforever.com" or "game2.trackmaniaforever.com". Server the client should use to continue talking with the API.
    • d ?. Set to "online_game"
    • e Set to 443. Maybe HTTPS port?
    • f Set to 80. Maybe HTTP port?
    • g Set to "World". Maybe base region?
    • h ?. Set to 1
    • i ?. Set to 1

CheckLogin

Used to check if login is already used for account creation.

Session required? Parameters Response
No
  • l Player login.
  • e Set to 1 if login is used, otherwise 0.
  • p ?. Set to 0.

MailAccount

Used to make the server send a password recovery email.

Session required? Parameters Response
No
  • login Player login

Empty response

Disconnect

Used to disconnect (Duh).

Session required? Parameters Response
Yes

Empty parameters

Empty response