Installer un serveur dédié TrackMania Nations Forever sous linux

Installation du serveur TrackMania Nations Forever sous linux

Basé sur le Tuto - Serveur dédié Trackmania Nations Forever - Installation, vous trouverez la dernière version des binaires dans le topic officiel mis à jour par l'équipe de Nadeo qui reste la meilleure source, Forum officiel : Serveur dédié pour TM Forever

wget "http://files2.trackmaniaforever.com/TrackmaniaServer_2011-02-21.zip"
unzip -l TrackmaniaServer_2011-02-21.zip
unzip  TrackmaniaServer_2011-02-21.zip -d TrackmaniaServer_2011-02-21
cd TrackmaniaServer_2011-02-21
 
# ./TrackmaniaServer
Starting TmForever v2011-02-21...
Initializing...
Loading system configuration...
...ERROR: No configuration file.
...Could not load the system configuration
Loading cache...
...OK
Listening for xml-rpc commands on port 5000.
Trackmania server daemon started with pid=17564 (parent=17563).
#

Dans le répertoire on remarquera la présence de :

ClientCommandLine.txt (non fourni)

C'est dans ce fichier que vous trouverez la syntaxe des commandes à utiliser en mode client pour contrôler votre serveur..

Readme_Dedicated.html

Est-ce bien utile de préciser qu'il devrait normalement à lui seul vous permettre de monter un serveur de base ? Consultez le en ligne : Readme_Dedicated.html

TrackmaniaServer / TrackmaniaServer.exe

Ce sont respectivement les binaires pour le serveur dédié Linux ou Windows. Vous l'aurez compris, une fois préparé votre serveur est prêt à être copié collé et lancé depuis n'importe quelle machine, qu'elle soit sous GNU Linux ou Windows.

GameData/

C'est dans ce dossier que nous placerons les circuits, la liste des maps et l'ensemble des fichiers de configuration du serveur.

Configuration du serveur dédié TrackMania Nations Forever

Basé sur le Tuto - Serveur dédié Trackmania Nations Forever - Configuration du serveur dédié

Votre serveur est désormais installé sur la machine, nous allons maintenant nous pencher sur la configuration du service. Pour ce faire rendez vous dans le fichier "GameData/Config/dedicated_cfg.txt"

<?xml version="1.0" encoding="utf-8" ?>
 
<dedicated>
        <authorization_levels>
                <level>
                        <name>SuperAdmin</name>
                        <password>SuperAdmin</password>
                </level>
                <level>
                        <name>Admin</name>
                        <password>Admin</password>
                </level>
                <level>
                        <name>User</name>
                        <password>User</password>
                </level>
        </authorization_levels>
 
        <masterserver_account>
                <login></login>
                <password></password>
                <validation_key></validation_key>
        </masterserver_account>
 
        <server_options>
                <name></name>
                <comment></comment>
                <hide_server>0</hide_server>                                    <!-- value is 0 (always shown), 1 (always hidden), 2 (hidden from nations) -->
 
                <max_players>32</max_players>
                <password></password>
 
                <max_spectators>32</max_spectators>
                <password_spectator></password_spectator>
 
                <ladder_mode>forced</ladder_mode>                               <!-- value between 'inactive', 'forced' (or '0', '1') -->
                <ladder_serverlimit_min>0</ladder_serverlimit_min>              <!-- Those values will be clamped to the limits authorized on http://official.trackmania.com/tmf-ladderserver/ -->
                <ladder_serverlimit_max>50000</ladder_serverlimit_max>
 
                <enable_p2p_upload>True</enable_p2p_upload>
                <enable_p2p_download>True</enable_p2p_download>
 
                <callvote_timeout>60000</callvote_timeout>
                <callvote_ratio>0.5</callvote_ratio>                            <!-- default ratio. value in [0..1], or -1 to forbid. -->
                <callvote_ratios>
                        <voteratio command="Ban" ratio="0.65"/>
                        <!-- commands can be "Ban", "Kick", "ChallengeRestart", "NextChallenge", ... -->
                </callvote_ratios>
 
                <allow_challenge_download>True</allow_challenge_download>
                <autosave_replays>False</autosave_replays>
                <autosave_validation_replays>False</autosave_validation_replays>
 
                <referee_password></referee_password>
                <referee_validation_mode>0</referee_validation_mode>            <!-- value is 0 (only validate top3 players),  1 (validate all players) -->
 
                <use_changing_validation_seed>False</use_changing_validation_seed>
        </server_options>
 
        <system_config>
                <connection_uploadrate>512</connection_uploadrate>              <!-- Kbps (kilo bits per second) -->
                <connection_downloadrate>8192</connection_downloadrate>         <!-- Kbps -->
 
                <force_ip_address></force_ip_address>
                <server_port>2350</server_port>
                <server_p2p_port>3450</server_p2p_port>
                <client_port>0</client_port>
                <bind_ip_address></bind_ip_address>
                <use_nat_upnp></use_nat_upnp>
 
                <p2p_cache_size>600</p2p_cache_size>
 
                <xmlrpc_port>5000</xmlrpc_port>
                <xmlrpc_allowremote>False</xmlrpc_allowremote>                  <!-- If you specify an ip adress here, it'll be the only accepted adress. this will improve security. -->
 
                <blacklist_url></blacklist_url>
                <guestlist_filename></guestlist_filename>
                <blacklist_filename></blacklist_filename>
 
                <packmask>stadium</packmask>
 
                <allow_spectator_relays>False</allow_spectator_relays>
 
                <!-- <minimum_client_build>2009-10-01</minimum_client_build> -->
 
                <!-- <disable_coherence_checks>laps</disable_coherence_checks> -->
 
                <use_proxy>False</use_proxy>
                <proxy_login></proxy_login>
                <proxy_password></proxy_password>
        </system_config>
</dedicated>

Les points à modifier

authorization_levels

Changer les mots de passe des levels (SuperAdmin, Admin et User) dans authorization_levels

masterserver_account

Le masterserver account correspond à votre compte auprès du serveur central de Trackmania. Si vous n'avez pas de compte pour votre serveur dédié il vous suffit d'en créer un depuis le jeu à cet effet.

server_options

Ici pensez simplement à paramétrer le nom de votre serveur et le nombre de joueurs acceptés (max_players). A vous de tester pour voir selon les ressources de votre machine le meilleur compromis. Au delà de 64 joueurs il faudra prévoir une machine puissante avec une grosse connexion.

Attention aux paramètres autosave_replays et autosave_validation_replays, à moins d'en avoir besoin je vous conseille de vérifier que cette valeur soit à false, autrement chaque course enregistrera son lot de replays, prenant au final une place importante et entraînant des pertes de performances évidentes. Si vous organisez des compétitions sur votre serveur il semble préférable d'utiliser les validation_replays qui ne conserveront que les meilleurs temps en vue d'un éventuel visionnage à postériori par les arbitres.

system_config

Là encore, peu de choses à configurer, remplissez éventuellement les champs guestlist_filename (slots réservés pour vos amis/votre team), blacklist_filename (liste des joueurs bannis du serveur) avec les fichiers correspondants. Saisissez si possible l'adresse du pc qui servira à distance pour contrôler votre serveur dans xmlrpc_allowremote , inutile de laisser n'importe qui prendre la main sur le serveur. Laissez les ports par défaut sauf si vous lancez plusieurs serveurs sur la même machine ou si le port est déjà utilisé.

Configuration du MatchSettings TrackMania Nations Forever

Basé sur le Tuto - Serveur dédié Trackmania Nations Forever - Configuration du MatchSettings

Vous pouvez dupliquer (en "NationsPlaceoweb.txt" par exemple) l'un fichier de match par défaut depuis le dossier "GameData/Tracks/MatchSettings/Nations/" qui contient

  • NationsBlue.txt
  • NationsGreen.txt
  • NationsRed.txt
  • NationsWhite.txt
# cp GameData/Tracks/MatchSettings/Nations/NationsWhite.txt GameData/Tracks/MatchSettings/Nations/NationsPlaceoweb.txt
/
game mode
  • 0 = Rounds (courses normales, tout le monde part en même temps, le premier arrive gagne)
  • 1 = TimeAttack (contre la montre)
  • 2 = Team (classement par teams rouge vs bleu)
  • 3 = Laps (nombre de tours)
  • 4 = Stunts (score des cascades)
timeattack_limit

Durée en secondes d'une manche de time attack (ex : 30000 = 5 minutes)

contenu du fichier NationsWhite.txt
?xml version="1.0" encoding="utf-8" ?>
<playlist>
        <gameinfos>
                <game_mode>0</game_mode>
                <chat_time>10000</chat_time>
                <finishtimeout>1</finishtimeout>
                <allwarmupduration>0</allwarmupduration>
                <disablerespawn>0</disablerespawn>
                <forceshowallopponents>0</forceshowallopponents>
                <rounds_pointslimit>30</rounds_pointslimit>
                <rounds_usenewrules>0</rounds_usenewrules>
                <rounds_forcedlaps>0</rounds_forcedlaps>
                <rounds_pointslimitnewrules>5</rounds_pointslimitnewrules>
                <team_pointslimit>50</team_pointslimit>
                <team_maxpoints>6</team_maxpoints>
                <team_usenewrules>0</team_usenewrules>
                <team_pointslimitnewrules>5</team_pointslimitnewrules>
                <timeattack_limit>180000</timeattack_limit>
                <timeattack_synchstartperiod>0</timeattack_synchstartperiod>
                <laps_nblaps>5</laps_nblaps>
                <laps_timelimit>0</laps_timelimit>
                <cup_pointslimit>100</cup_pointslimit>
                <cup_roundsperchallenge>5</cup_roundsperchallenge>
                <cup_nbwinners>3</cup_nbwinners>
                <cup_warmupduration>2</cup_warmupduration>
        </gameinfos>
 
        <hotseat>
                <game_mode>0</game_mode>
                <time_limit>300000</time_limit>
                <rounds_count>5</rounds_count>
        </hotseat>
 
        <filter>
                <is_lan>1</is_lan>
                <is_internet>1</is_internet>
                <is_solo>0</is_solo>
                <is_hotseat>0</is_hotseat>
                <sort_index>7</sort_index>
                <random_map_order>0</random_map_order>
                <force_default_gamemode>0</force_default_gamemode>
        </filter>
 
        <startindex>0</startindex>
        <challenge>
                <file>Campaigns\Nations\White\A01-Race.Challenge.Gbx</file>
                <ident>BeySZdnfuSh4nHY5xztiXLmlrXe</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A02-Race.Challenge.Gbx</file>
                <ident>JwKdDsOUh4L9_eYyRsdiA2o1fW1</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A03-Race.Challenge.Gbx</file>
                <ident>mWxQhvvPOoNfPaq18j3dokLqyO7</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A04-Acrobatic.Challenge.Gbx</file>
                <ident>SEHmwPJVBl3NpHS56w6Sirac2Ic</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A05-Race.Challenge.Gbx</file>
                <ident>I7rI7jAga6C4tGAe5OTDoyLF2fh</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A06-Obstacle.Challenge.Gbx</file>
                <ident>syko1DvAxleoVlqMsc1sJzqbt66</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A07-Race.Challenge.Gbx</file>
                <ident>KzeBzLOI62lxu3haZCPFn_4BfD6</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A08-Endurance.Challenge.Gbx</file>
                <ident>KDBPTuNkrZG6jMxuRqmDBbLjfp6</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A09-Race.Challenge.Gbx</file>
                <ident>TteOqSjrhVsdjZYAaLuGBWX2a4c</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A10-Acrobatic.Challenge.Gbx</file>
                <ident>jH8X3qPtpn6pj3dLAaq08pyDdp1</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A11-Race.Challenge.Gbx</file>
                <ident>N0CpLabOm8Kk6Lsf0kwelgHiMQm</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A12-Speed.Challenge.Gbx</file>
                <ident>zwAbNlFSDcXjRBk0YSMyxc5kJJ8</ident>
        </challenge>
                <file>Campaigns\Nations\White\A13-Race.Challenge.Gbx</file>
                <ident>K27AW3HYV47qqqXentunIoUERu8</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A14-Race.Challenge.Gbx</file>
                <ident>6ktPCqLADXXuy5LaOLTzktaGlKf</ident>
        </challenge>
        <challenge>
                <file>Campaigns\Nations\White\A15-Speed.Challenge.Gbx</file>
                <ident>dJQvN8hB18o3SXNl897MOShzZQ5</ident>
        </challenge>
</playlist>

Lancer le serveur TrackMania Nations Forever

Basé sur le Tuto - Serveur dédié Trackmania Nations Forever - Lancer le serveur, et aller plus loin

Maintenant que tout est en place il ne reste plus qu'à lancer le serveur dédié. Pour ce faire la syntaxe de la commande Linux est la suivante :

./TrackmaniaServer /dedicated_cfg=/tmp/TrackmaniaServer_2011-02-21/GameData/Config/dedicated_cfg.txt /game_settings=/tmp/TrackmaniaServer_2011-02-21/GameData/Tracks/MatchSettings/Nations/NationsPlaceoweb.txt /internet

Attention, serveur lancé mais impossible de s'y connecter

Le serveur se lance mais impossible de le trouver et joindre ? J'ai donc forcé l'option :

<bind_ip_address>91.121.76.65</bind_ip_address>
Les options supplémentaires

Vous pouvez spécifier si votre serveur est de type internet ou LAN avec l'option " /internet " ou " /lan " (défaut)

Concernant les numéros de ports réseau votre machine doit pouvoir :

  • sortir en http (TCP 80) et https (443 tcp)
  • recevoir sur le port <server_port> en tcp et udp (2350 tcp eu udp par défaut)
  • recevoir sur le port <server_p2p_port> en tcp (3450 tcp par défaut)
  • (pour l'administration à distance) recevoir aussi sur le port <xmlrpc_port> en tcp (5000 tcp par défaut, parfois utilisé par le système sous Windows)

Pensez donc à bien ouvrir vos ports et à faire les redirections nécessaires sur les routeurs.

Se connecter à un serveur TrackMania Nations Forever

tmtp://#join=placeoweb

Rajouter un serveur favoris TrackMania Nations Forever

tmtp://#addfavourite=placeoweb
La création de compte

Elle est facultative mais pourra vous servir dans le cas d'un serveur internet, surtout si vous voulez permettre l'échange de coppers (la monnaie du jeu dans la version payante). Pour un serveur simple utilisez n'importe quel compte (ou un compte créé depuis le jeu pour l'occasion), sinon rendez-vous sur cette page dans la section Dedicated Server.

Vérifier que le serveur tourne et joignable depuis l'extérieur : http://dedimania.net/deditest/

Pour tester si votre serveur est joignable depuis l'extérieur : http://dedimania.net/deditest/

Administrer son serveur Trackmania en PHP

Si vous avez besoin de gérer votre serveur sans être connecté au jeu, ou si vous organisez par exemple des tournois, les interfaces php sont un excellent moyen de contrôle. A l'heure actuelle l'interface la plus aboutie que j'ai testé est TMWeb.

Développer son interface d'administration / Widget PHP

Aucune interface ne comble vos attentes ? Si vous vous y connaissez un minimum en php pourquoi ne pas attaquer directement en développant la votre ?

Nadeo a eu la gentillesse de fournir avec le serveur dédié un ensemble de fichiers d'exemples ainsi qu'un fichier source contenant les fonctions précodées pour intéragir depuis php avec votre ou vos serveurs. Tout se trouve dans le dossier " RemoteControlExamples/PhpRemote/ " et le fichier "basic.php" est sans doute le meilleur moyen de voir ce que cette API est capable de faire. Vous pourrez ensuite modifier à votre guise cette base pour construire, par exemple, des modules pour afficher la liste des joueurs connectés sur votre serveur en temps réel, la map en cours, les temps, etc...

Ressources