
vrcon, très simple à installer, permet d’effectuer les opérations de base sur Quake 3, Call of Duty (CoD), Unreal Tournament (UT), etc.
qstat, beaucoup plus complet mais aussi plus lourd à installer et à utiliser
XQF, interface graphique de qstat sous X11, déjà plus délicat à mettre en place (fink est fortement recommandé pour installer certaines bibliothèques)
Utilitaires PHP : signalons qu’il existe tout un tas de scripts php permettant d’interroger les serveurs de jeu
Chaque jeu a évidemment une syntaxe particulière pour cette commande, celle-ci se trouve généralement assez facilement sur internet, citons notamment un site qui fournit une mine d’informations utiles, celui de KQUERY et notamment sa partie consacrée au développement.
M’étant plus particulièrement intéressé à Call of Duty, je fournirai des exemples pour ce jeu, sachez que les commande de Quake sont identiques à peu de choses près.
Voici donc un programme simple en C qu’il suffit de copier/coller dans un projet de type "Standard Tool" dans xcode pour tester.
Ce code simple montre une manière d’établir une liaison avec le serveur (socket) et de l’interroger avec le protocole udp, utilisé pour la plupart des jeux en ligne (SOCK_DGRAM). Contrairement au ftp, ce protocole n’est pas sécurisé, et un problème pouvant se poser est l’ordre de réception des paquets (datagrammes), le premier reçu n’étant pas forcément le premier envoyé. Dans l’exemple ci-dessus, toute l’information tient normalement dans un seul paquet udp.
Voici un exemple de retour :

De nombreuses informations sont disponibles, tout d’abord un accusé de bonne réception (statusResponse), suivi d’un certain nombre de champs sous la forme "\nom du champ\valeur du champ". Parmi ces informations se trouvent le type de jeu (g_gametype), la carte en cours (mapname), la version du jeu sur le serveur (shortversion) ou encore le nombre maximum de joueurs autorisés sur le serveur (sv_maxclients), etc.
Vient ensuite la liste des joueurs présents sur le serveur sous la forme "score ping nom". Ce dernier champ, comme le nom du serveur (sv_hostname), peuvent comporter des codes de couleur sous la forme ^n, n variant de 0 à 9 et indiquant la couleur des caractères qui suivent. A titre informatif, ces codes sont :
Si vous êtes administrateur d’un serveur de jeu, vous pouvez entrer un certain nombre de commandes par la "console". Celles de Call of Duty permettent par exemple de redémarrer une carte, changer de carte et de type de jeu, mettre un mot de passe ou encore "kicker" un joueur indésirable.
Toujours dans Call of Duty, il suffit de remplacer la commande de statut dans le code ci-dessus par une commande du type :
La syntaxe des commandes se trouve sur les forums de jeu généralement, ou en explorant le code source de browsers existants.
En voici quelque unes pour CoD :
map_restart pour redémarrer la carte
map_rotate pour passer à la carte suivante
map nom_de_la_carte pour mettre la carte spécifiée
g_gametype gametype pour changer le type de jeu
say blabla pour dire blabla à tout le monde
kick bill_gates pour exclure le joueur qui s’appelle bill_gates, il n’est pas nécessaire d’inclure les codes de couleur dans le nom du joueur
A noter que certaines commandes ne peuvent s’enchaîner et qu’il faut prévoir un petit délai entre elles pour que les deux soit prises en compte, comme par exemple g_gametype et map_restart.
Enfin, il est possible de récupérer des informations sur le serveur, comme par exemple les cartes disponibles ou les fichiers de configuration (*.cfg) en utilisant la commande fdir. Le retour de cette commande peut ne pas tenir sur un seul paquet udp, il faut donc tester un code de fin (comme par exemple le nombre de fichiers renvoyés sous la forme "xx files listed"). De plus, le second paquet peut arriver avant le premier sur certaines configurations, je vous laisse imaginer la gymnastique pour tout remettre dans le bon sens.
Une autre particularité des jeux en ligne est la présence de "master servers", serveurs qui regroupent les adresses des serveurs en ligne. Je ne vous parlerai pas ici de ceux de type "gamespy" car le protocole utilisé n’est officiellement pas "ouvert" même si il est relativement aisé de le trouver sur des sites spécialisés.
Pour les serveurs maîtres officiels des jeux de type Quake III, CoD, etc, la commande à utiliser pour les interroger est :
La variable protocol est un entier qui dépend de la version du jeu, il correspond au champ "protocol" de la commande getstatus. Dans le cas de Call of Duty, il vaut 6 pour la version 1.5 du jeu, 22 pour son extension United Offensive en version 1.51, et 115 pour Call of Duty 2 en version 1.0, uniquement disponible sous Windows pour le moment (vivement le moi de mai !)
Les paramètres empty et full sont optionnels et permettent de récupérer les serveurs vides et ceux qui sont pleins. Si ces options fonctionnent très bien sur les serveurs de Quake III, elles sont totalement ignorées sur ceux de Call of Duty et son extension.
En réponse à cette commande, le serveur maître renvoie tout un tas de paquets udp qui comprennent les ip et port des serveurs disponibles, sous la forme "ip :port ;". La fin de la réponse se caractérise par un code de type "EOF", un essai de réception permet de vérifier ce code de fin du serveur en fonction du jeu.
Parallèlement à ces recherches, je me suis mis à la programmation de Cocoa afin de réaliser un petit programme gratuit adapté à Call of Duty et son extension. Ce programme dénommé iClanASC exploite un certain nombre de commandes expliquées ci-dessus. Destiné à l’origine à simplifier la vie de certains administrateurs (un peu fainéants) des serveurs du iClan, j’ai peu à peu étoffé le programme et décidé de le diffuser librement.
Pour ceux qui craindraient de se lancer dans ce type de développement, sachez que des connaissances de base du langage C suffisent pour créer ce type de logiciel tant la documentation Apple est abondante pour les débutants, les outils (xcode et interface builder) sont simples à utiliser et les participants aux différents fora de programmation sur mac ne sont pas avares de conseils. Je conseillerais tout de même aux débutants le lecture de Cocoa par la pratique, de Aaron Hillegass aux éditions Eyrolles , un très bon livre pour débuter.
Je vous livre ci-dessous quelques captures d’écran de ce programme pour illustrer les possibilités :
Fenêtre principale

Cette fenêtre présente les serveurs placés dans la liste principale et les joueurs présents sur le serveur sélectionné ainsi que des informations sur ce serveur (carte en cours, système "anti-cheat" de type punkbuster,...) La fenêtre des joueurs correspond à peu de chose près à l’exemple fourni plus haut.
Les boutons "+","modify" et "-" servent à ajouter, modifier ou supprimer des serveurs de la liste principale. Les boutons "refresh" servent à ... rafraîchir les informations sur le(s) serveur(s).
Des informations plus détaillées sont obtenus en cliquant sur le (i) :

Dans le cas d’un serveur pour lequel le mot de passe est connu, le panneau suivant s’affiche afin d’administrer le serveur.

A l’aide de ce panneau, il est possible d’effectuer les opérations de base (les noms des boutons sont suffisamment explicites).
Il est également possible de prévoir une "rotation de cartes" temporaire pour passer une bonne soirée entre amis sans perturber la rotation habituelle du serveur à l’aide d’un interface graphique :

Enfin, il est possible en interrogeant le "master server" puis tous les serveurs individuellement de rechercher un joueur ou un serveur, comme indiqué ci dessous :

Cette fonction est très pratique pour retrouver un ami en jeu, ou les membres d’un clan. D’un point de vue programmation, je conseille l’utilisation du multitâche (threads) pour accélérer l’interrogation des serveurs. A titre d’information, il fallait environ 4 minutes pour interroger 4000 serveurs avec un seul "thread", ce temps est maintenant situé entre 10 et 30 secondes suivant la bande passante disponible et la configuration réseau de l’utilisateur.
Ce petit article vous fournit les principales informations pour écrire un petit programme adapté à votre jeu préféré. Personnellement, avec quelques connaissances de base en C, il ne m’a fallu que quelques soirées et parties de week-end pour sortir un première version alpha utilisable.
Il aura fallu environ 8 mois pour sortir une première béta publique en y consacrant un peu de temps de loisirs. Le seul problème, c’est que la programmation est un exercice très prenant, le temps consacré au jeu diminue et le niveau baisse...
Si vous voulez vous faire une idée des possibilités, vous pouvez télécharger iClanASC en version béta au moment de la rédaction de cet article à cette adresse. Merci de lire les avertissements avant de télécharger.
Juste pour signaler qu'il existe un autre soft qui s'appelle Only Mortal et qui se trouve sur le site d'Apple/MacOS X/Downloads/Games/Utilities.
C'est un browser de serveurs de jeux, pour JK2, Quake 1,2 & 3, QW, RtCW, SoF2 et UT.