Un forum de discussions est primordial pour la survie d’un jeu en ligne. En effet, il permet de fidéliser les joueurs en leur permettant de discuter entres eux ou d’apporter leur pierre à l’édifice avec une rubrique « Vos idées pour améliorer le jeu », …

C’est une évidence lorsque le forum est installé et fonctionnel. Malheureusement, il n’est pas aussi simple d’installer un forum pour un site existant.

La problèmatique

Installer un forum, en soit, ce n’est pas difficile. Il existe bon nombre de forum gratuits et simple à installer.

La difficulté vient surtout au moment de joindre la base de données de vos joueurs avec celle du forum. Car oui, vous n’allez tout de même pas demander à vos joueurs de faire une nouvelle inscription uniquement pour avoir le droit de poster sur le forum ?!

Et puis, je suis persuadé que vous aimeriez que les 2 bases soient liées afin de permettre, par exemple, aux joueurs d’une faction d’avoir accès à une partie du forum et aux joueurs de l’autre faction à une autre partie. Non ?! Si… Je m’en doutais.

Une solution

Il existe de nombreux forums gratuits. J’ai donc choisi un forum parmi ceux-là. Je cherchais un forum en Php, qui soit bien sécurisé, qui comporte un maximum de fonctionnalités sans pour autant en avoir des superflues, qui ne soit pas trop lourd et qui n’utilise pas trop de ressources. Bref, le forum presque parfait !

Mon choix s’est donc posé sur FluxBB, un forum qui a été conçu par les anciens développeurs de PunBB, un gage de qualité. FluxBB est donc léger (1.3 Mo), rapide et dispose de pas mal de fonctionnalités. Son design est simple et est modifiable sans problème. Et si vraiment vous avez envie de rajouter des fonctionnalités, il existe bon nombre de plugins. Évidement, le code généré est conforme aux dernières normes.

Reste qu’il faut maintenant intégrer le forum dans le jeu.

www.gouik.com - La marmotte

www.gouik.com - La marmotte

Intégrer le forum dans le jeu

Je vais donc indiquer ici la marche à suivre pour le forum FluxBB, mais il est possible de le faire avec d’autres forum. la marche à suivre reste relativement la même. Il vous faudra, toutefois, mettre la main dans le code en fonction du forum que vous utilisez.

La première chose à faire est d’installer le forum dans un sous dossier de votre jeu. Le dossier « forum » tant qu’à faire.

Une fois le forum installé, vérifié et fonctionnel, vous pouvez intégrer la librairie du forum dans vos pages (vous avez bien un site en Php ?!).
La librairie à inclure se nomme « common.php » et se trouve dans le sous-dossier « include ». Vous aurez donc en début de vos fichier la ligne suivante :

include « forum/include/common.php »;

Attention, je vais au strict minimum pour le code. À vous de rajouter le code pour faire les vérifications nécessaires (peut-être utiliser require_once ? Rajoutez un @ au début ? À vous de voir).

Nouveaux joueurs

L’étape suivante consiste à prendre en compte l’inscription d’un joueur sur le jeu et sur le forum en même temps. Pour simplifier le développement et pouvoir changer de forum quand vous en aurez envie, ce tutoriel conserve la base des joueurs et ne modifie rien au forum.

Donc, lorsque un joueur s’inscrit, vous allez devoir rajouter quelques lignes . Commençons par initialiser les variables :

$username = $Pseudo;
$intial_group_id = gFORUM_GROUP_VISITEUR;
$password_hash = sha1($Password);
$email1 = $Email;
$email_setting = 1;
$timezone = 1;
$dst = 0; // heure d’hiver / d’été
$language = ‘French’;
$now = time();

Vous remarquerez que le mot de passe est crypté pour le forum.
gFORUM_GROUP_VISITEUR représente l’identifiant du groupe par défaut sur le forum. À vous de modifier $timezone en fonction de votre emplacement. Le mieux étant de regarder la base utilisateurs de votre forum et de voir un compte par défaut.
Ensuite, le nouveau joueur est ajouté au forum :

$db->query(‘INSERT INTO ‘.$db->prefix.’users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit) VALUES(\ ».$db->escape($username).’\’, ‘.$intial_group_id.’, \ ».$password_hash.’\’, \ ».$db->escape($email1).’\’, ‘.$email_setting.’, ‘.$timezone.’ , ‘.$dst.’, \ ».$db->escape($language).’\’, \ ».$pun_config[‘o_default_style’].’\’, ‘.$now.’, \ ».get_remote_address().’\’, ‘.$now.’)’) or error(‘Unable to create user’, __FILE__, __LINE__, $db->error());

Là encore, à vous de gérer les erreurs correctement.
Il est possible de récupérer l’identifiant du joueur dans le forum. Très utile si vous souhaitez modifier un joueur sans avoir à faire une recherche complexe.

$idForum = $db->insert_id();

Vous pouvez ajouter cet identifiant dans votre base joueurs apr exemple.

Voilà pour la partie inscription. Passons à l’étape connexion.

Un joueur se connecte

Il faut que le joueur soit connecté à votre jeu et au forum en simultané et pour la même période. Il faut donc modifier votre fichier de connexion en ajoutant quelques lignes :

$expire = time()+(3600*24*30);
pun_setcookie($idForum, sha1($Password), $expire);

$IdForum est la valeur que vous avez récupéré précédemment. Le mot de passe doit être crypté. Si il est déjà crypté dans votre base, pas de problème. Attention à utiliser le même cryptage ou à mémoriser le mot de passe sous sa forme cryptée en SHA-1.

La date d’expiration doit être la même que celle du forum (tant qu’à faire).

Pour vérifier si un joueur est bien connecté, vous pouvez vérifier soit votre cookie, soit celui du forum. Dans ce dernier cas, inutile de créer un cookie en plus pour votre jeu du coup.

Le joueur se déconnecte

Lorsqu’un joueur se déconnecte, il faut également le déconnecté du forum (sauf si vous utilisez le cookie du forum…).
Pour cela, il faut ajouter quelques lignes . Commençons par supprimer ce joueur des utilisateurs en ligne :

$db->query(‘DELETE FROM ‘.$db->prefix.’online WHERE user_id=’.$pun_user[‘id’]) or error(‘Unable to delete from online list’, __FILE__, __LINE__, $db->error());

Puis, faire la mise à jour de sa dernière visite :

if (isset($pun_user[‘logged’])) {
$db->query(‘UPDATE ‘.$db->prefix.’users SET last_visit=’.$pun_user[‘logged’].’ WHERE id=’.$pun_user[‘id’]) or error(‘Unable to update user visit data’, __FILE__, __LINE__, $db->error());
}

Et enfin modifier le cookie :

pun_setcookie(1, pun_hash(uniqid(rand(), true)), time() + 31536000);

Voilà, c’est fini. Le forum est intégré à votre jeu. Vous pouvez maintenant ajouter des fonctionnalités comme le changement de groupe après un certain temps ou après avoir réalisé une quête, ce qui vous évitera d’avoir à modérer un peu trop votre forum.
N’oubliez pas de stopper les inscriptions au forum, les joueurs ne devant s’inscrire que par le biais de votre jeu.

Vous savez comment intégrer un nouveau joueur sur ce forum. Intégrer les anciens joueurs au forum sans avoir à leur demander un nouveau mot de passe ne devrait pas trop poser de problème (sauf si vous utilisez un autre codage que SHA-1…).

Il ne vous reste plus qu’à intégrer graphiquement ce forum à votre jeu et le tour est joué !

Conclusion

Il est très facile d’intégrer un forum à un jeu existant en cours de création. Il faut quand même, de temps en temps, mettre les mains dans le code. Attention également au nommage de vos fonctions et de vos globales qui peuvent entrer en conflit avec le code du forum.

Attention également à modifier le moins possible, voir pas du tout, le code du forum pour pouvoir profiter des mises à jour sans avoir à tout refaire à chaque fois. Les mises à jour sur les forum étant souvent des mises à jour de sécurité, il serait dommage de s’en passer !

FluxBB, site officiel : http://fluxbb.org/
FluxBB en français : http://fluxbb.fr/