Il y a quelques années, j'avais installé un serveur WoW privé (Mangos) pour "le fun" et apprendre comment faire. Mon premier essais s'est fait sous Windows; maintenant, je veux faire un serveur sous Linux (Debian).
Pourquoi Linux, car le serveur est bien plus léger que sa version Windows (surtout si on est sur une version CLI), et surtout maintenant, je me sens assez à l'aise dans cet univers (Debian) pour tenter l'expérience.
Pré-requis
Volontairement je ne parle pas de la version "MoP", car il s'agit de la version d'exploitation de WoW et que j'estime que B. doit être rémunérer pour son travail, et ensuite car les patches ne sont pas fixées
Vous avez besoin de:
- Un client WOW compatible avec la version du serveur choisie (1.12.2 pour la version classique "vanilla", 2.4.3 pour la version "burning crusade", 3.3.5a pour la version Warth of the lich king, 4.3.4 pour la version cataclysm) installé sur votre PC.
- Un client ssh (putty) et scp (winscp) sur le PC.
- Un serveur Debian 7.1 sur une VM (connectée au réseaux local en mode "Bridged"), je lui ai fixé une IP compatible avec mon PC et completement mise à jour.
Installation du serveur
Une fois installé, toutes les commandes se feront via un ssh.
Mise a jour et Installation des compilateurs
Sous le compte root:
apt-get upgrade
apt-get install mysql-server
apt-get -y install gcc g++ automake autoconf screen make libmysql++-dev libtool libssl-dev subversion patch zlibc libc6 git git-core pkg-config
apt-get -y install cmake cmake-qt-gui git libace-ssl-dev libace-dev libbz2-dev libmysql++-dev libmysqlclient-dev libssl-dev
apt-get -y install mysql-client mysql-common mysql-server zlib1g-dev vim autoconf libtool screen bash
Optenir les sources et compiler les sources
Préparation de l'environnement
Je vous conseille de créer un dossier dans votre session (ou mieux dans la session de l'utilisateur qui fera tourner vos services), dans cet exemple j'utiliserais toujours l'utilisateur mangos.
Suivant la version que vous désirez émuler, je vous conseille de créer le dossier "source" en suivant cette logique, j'ajouterais aussi le dossier "cible" où les scripts installeront le serveur:
- mangoszero: Wow "Classic" client version 1.12.2
- mangosone: wow "Burning Crusage" client version 2.4.3
- mangostwo: wow "Warth of The Lich King" client version 3.3.5a
- mangostree: wow "Cataclysm" client version 4.3.4
chdir servers
mkdir mangosxxxx
chdir ..
mkdir sources
chdir sources
mkdir mangosxxxx
chdir mangosxxxx
Cela devrait donner quelque chose comme ceci
/home/mangos/servers/mangostwo
Récupération des sources
Nous allons récuperer les sources, database et surtout les scripts depuis le github:
git clone https://github.com/mangosxxxx/database database
chdir server/src/bindings/
git clone https://github.com/mangosxxxx/scripts scripts
Editez bien le fichier CMakeLists pour retirer le commentaire de la ligne suivante(afin d'ajouter le dossier lors de la compilation).
Ce fichier sera explorer durant notre compilation initiale pour définir quelles dossiers doivent être compilés.
Dans le dossier "sources/server", creez un dossier build (qui va recevoir les fichiers intercompilés)
chdir build
Cela devrait donner quelque chose comme ceci:
/home/mangos/sources/mangostwo/server
/home/mangos/sources/mangostwo/server/build
/home/mangos/sources/mangostwo/server/src/bindings/scripts
/home/mangos/sources/mangostwo/databases
/home/mangos/servers/mangostwo
Si vous deviez mettre a jour l'une de vos copies:
Allez dans le dossier a mettre a jour, et tapez simplement:
git pull --recurse-submodules
git submodule init
git submodule update
Je vous conseille aussi de bien réfléchir où vous désirez installer votre serveur, personnellement le dossier sera /home/mangos/servers/mangostwo.
Compilation
La compliation est extremement simple, mais longue... vérifiez bien que vous êtes dans le dossier "build".
make
make install
Si vous avez plusieurs core, vous pouvez le préciser dans la/les commande(s) make : make -j # ainsi si vous avez 4 coeurs:
Ces opérations VONT prendre beaucoup de temps (suivant votre puissance de PC) donc nous allons préparer la suite.
Préparation des cartes
Je vais copier les cartes de Wow sur le serveur, afin de pouvoir les intégrer, à terme, au serveur.
je copie le répertoire data de mon installation wow dans le dossier source de la version qui m'intéresse;
Là aussi suivant votre PC, cela prendra du temps, je vous sugère de vous faire un bon café...
Extraction des données du jeu
j'aurais besoin de quatres logiciels pour extraires les données du client:
- ad sert a extraire les fichiers DBC et les cartes du jeu.
- vmap_extractor sert a extraire les données modèles des fichiers clients.
- vmap_assembler crée des fichiers "vmap" adapté aux besoins de MaNGOS.
- MoveMapGen crée une carte de movement des monstres pour qu'ils ne traversent pas les murs, objets etc... ce n'est pas une étape obligatoire, mais c'est toujours mieux (cela devrait aussi empecher le glissement des cadavres sur le sol).
ACE
Afin d'éviter une erreur lors de la compilation de certaines parties, il faut dire au Warppers ACE que vous fonctionnez sous Linux.
Si vous ommettez cette étape vous aurez un message d'erreur lors de la compilation de vmap_assembler:
from /../../dep/ACE_wrappers/ace/Basic_Types.h:46,
from /../../src/framework/Platform/Define.h:24,
from /server/src/game/vmap/BIH.h:26,
from /server/src/game/vmap/BIH.cpp:19:
/../../dep/ACE_wrappers/ace/config-macros.h:28:26: fatal error: ace/config.h: No such file or directory
compilation terminated.
make[2]: *** [CMakeFiles/vmap.dir/home/mangos/mangos1/server/src/game/vmap/BIH.cpp.o] Error 1
make[1]: *** [CMakeFiles/vmap.dir/all] Error 2
make: *** [all] Error 2
Pour éviter ce problème, c'est très simple, vous devez créer un fichier "config.h" dans le dossier ad-doc:
Simplement collez-y ceci:
#include "config-linux.h"
libmpq
là aussi je vais compiler tout ce que j'ai besoin, mais avant tout, je vais compiler ma librairie libmpq (je pense que vous pouvez ignorez cette épate pour "cataclysm")
./autogen.sh
./configure
make
ad
je vais compiler ce logiciel, puis le copier dans le dossier mangostwo
cmake .
make
cp ad /home/mangos/sources/mangostwo/
vmapextractor
je vais compiler ce logiciel, puis le copier dans le dossier mangostwo
cmake .
make
cp vmapextract/vmapextractor /home/mangos/sources/mangostwo/
vmap_assembler
je vais compiler ce logiciel, puis le copier dans le dossier mangostwo
cmake .
make
cp vmap_assembler /home/mangos/sources/mangostwo/
MoveMapGen
Ce programme permet de créer les vmap (en gros cela permet [en théorie] aux PNJs de ne pas passer au travers des murs, ou dans le sol) a condition d'activer le paramêtre dans le fichier ini.
je vais compiler ce logiciel, puis le copier dans le dossier mangostwo
cmake .
make
cp MoveMapGen /home/mangos/sources/mangostwo/
cp /home/mangos/sources/mangostwo/server/contrib/extractor_binary/MoveMapGen.sh /home/mangos/sources/mangostwo/
cp /home/mangos/sources/mangostwo/server/contrib/extractor_binary/offmesh.txt /home/mangos/sources/mangostwo/
Executer l'extraction des cartes
Là aussi il n'y a rien d'extraordinaire a faire...
Sur mon labo, je n'ai pas du ajouter l'attribut execute, mais si besoin, voici la marche a suivre:
chmod +x vmapextractor
chmod +x vmap_assembler
chmod +x MoveMapGen
si tout est près:
./vmapextractor
mkdir vmaps
./vmap_assembler Buildings vmaps
Si l'on désire utiliser les cartes de mouvements, il faudra aussi executer le script suivant et allez faire un (long) tour:
Importation dans le serveur
Il ne reste plus qu'a copier le résultat de toutes ces extractions dans le dossier serveur:
cp dbc -R /home/mangos/sources/mangostwo/server/data
cp maps -R /home/mangos/sources/mangostwo/server/data
cp vmaps -R /home/mangos/sources/mangostwo/server/data