[Tutoriel Windows]Compiler un core Mangos
[Tutoriel Windows] Compiler un core Mangos


SOMMAIRE

  1. Introduction.
    1. Qu'est ce que la compilation ?
    2. Pourquoi s'embêter à compiler ?
  2. Logiciels Nécessaires.
  3. Récupérer les sources mangos.
    1. Préparation.
    2. Récupération des sources MaNGOS.
    3. Récupération des sources Scriptdev2.
  4. Compilation Core / Scriptdev2.
    1. Configurer et compiler pour le Core.
    2. Configurer et compiler pour Scriptdev2.
  5. Appliquer des patchs.
  6. En cas de problèmes.



1. Introduction

a. Qu'est ce que la compilation ?
La compilation c'est le fait de transformer le code source - relativement compréhensible par l'humain, ici le C++ - en langage compréhensible par l'ordinateur (Binaire).
Pour cette opération il vous faudra donc le code source qui est composé de nombreux fichiers. Sachez que la marche inverse (du langage machine vers le code source) est impossible. Vous ne pourrez pas avoir le code source d'un mangos.exe.

b. Pourquoi s'embêter à compiler ?
On viens de voir qu'on ne pouvait pas décompiler un serveur. Et c'est pour cela que compiler vous même est utile : Vous pourrez modifiez à souhait votre émulateur, rajouter des patchs trouvés sur internet ou vos propres modifications, vous pourrez être toujours à jours, pas besoin que quelqu'un fasse le travail et vous pourrez mettre que ce qui est utile !
Vous ne dépendrez de personne, vous pourrez fusionner des debugs trouvés un peu partout, rajouter de nouvelles commandes, enfin bref, si vous compilez vous même vous aurez un gros avantage par rapport à d'autre et surtout vous comprendrez un peu mieux le fonctionnement de votre émulateur.
Après ces petites explications, passons à la suite.

2. Logiciels nécessaires.
3. Récupérer les sources mangos [sous GIT].

a. Préparation.
Installez msysGIT si ce n'est pas déjà fait.
Créez un dossier, par exemple mangos, on travaillera uniquement dans ce dossier.
Faites un clique droit sur le dossier que vous avez créé et faites Git Bash Here.

b. Récupération des sources MaNGOS.
Une fois la console ouverte, tapez :
Citation :git clone git://github.com/mangos/mangos.git master
La commande git clone permet de copier le contenu d'un dépôt sur votre disque dur. Cela va donc copier les sources de la branche principale (master) de MaNGOS. A la place de master vous pouvez indiquer une autre branche, que vous trouverez ici : http://github.com/mangos/mangos.

Une fois terminé, tapez :
Citation :cd master
Cette commande permet de vous déplacer dans le dossier master, qui vient d'être créé en copiant les sources.

Remarque : Ce dossier créé, le dossier master, sera appelé répertoire racine.

Ensuite, en faisant :
Citation :git pull origin master
Les sources seront mises à jour avec la dernière version.

c. Récupération des sources Scriptdev2.
Toujours dans la console GIT, tapez :
Citation :cd src/bindings

Maintenant, vous n'avez plus qu'a récupérer les sources de ScripDev2 en remplacent REVISION par la révision que vous voulez :
Citation :git svn clone -r REVISION https://scriptdev2.svn.sourceforge.net/s...scriptdev2 ScriptDev2

Pour connaître la dernière révision, vous pouvez vous rendre ici.
A l'heure où j'écris ces lignes, cela donne :
Citation :git svn clone -r 1815 https://scriptdev2.svn.sourceforge.net/s...scriptdev2 ScriptDev2

Voilà, à ce stade vous avez les sources MaNGOS et ScriptDev2 de récupérées.

4. Compilation Core / ScriptDev2

a. Configurer et compiler pour le Core.
Allez dans répertoire racine > win.

Lancez mangosdVC100.sln avec VCExpress.
Allez dans Générer > Gestionnaire de configurations
Mettez configuration de la solution active sur : Release.
Fermez.

Retournez dans Générer > Générer la solution.

Maintenant, il faut patienter, la première compilation peut être plutôt longue. Mais une fois faites, vous pourrez appliquer vos patch et recompiler beaucoup plus rapidement, en effet, seuls les fichiers modifiés seront recompilés, un gros gain de temps et très pratique pour tester rapidement ces modifications.

une fois terminer il doit y avoir écris génération réussite en bas de VCExpress
Le core est compilé !
Vous trouverez les fichiers compilés dans bin > Win32_Release.

b. Configurer et compiler pour Scriptdev2.
Aller dans : src > bindings > ScriptDev2

Lancer : scriptVC100.sln avec VCExpress.
Aller dans Générer > Gestionnaire de configurations.
Mettez configuration de la solution active sur : Release.
Fermez.

Retourner dans Générer > Générer la solution.

Les fichiers conf se trouvent dans :
Pour mangosd.conf, dans /src/mangosd/ sous le nom de mangosd.conf.dist.in que vous devrez renommer en mangosd.conf.
Pour realmd.conf, dans /src/realmd/ sous le nom de realmd.conf.dist.in que vous devrez renommer en realmd.conf.
Pour scriptdev2.conf, dans /src/bindings/ScriptDev/ sous le nom de scriptdev2.conf.dist.in que vous devrez renommer en scriptdev2.conf.

5. Appliquer des Patchs.

Cette étape est bien évidement facultative, elle vous explique succinctement comment appliquer des patchs que vous trouveriez sur le web.

A partir d'un fichier .patch ou .diff :
Mettre le fichier .patch ou .diff dans le répertoire racine.
Lancez Git a la racine et y mettre cette commande :
Citation :git apply <nom du fichier>.<extension>
à remplacer bien sur par le nom et l'extension exemple : fichier.diff ou core.patch

A partir d'un lien :
Prenons l'exemple du patch véhicule, le dépôt se trouve ici : http://github.com/Tasssadar/Valhalla-Pro...ee/vehicle
En haut de la page vous avez [HTTP] [Git Read-Only]. Cliquez sur [Git Read-Only] pour avoir le lien de récupération du dépôt, dans ce cas : git://github.com/Tasssadar/Valhalla-Project.git
Il faudra ensuite la branche, pour cela, passez votre souris sur Switch Branches (8), vous pouvez voir que vous vous trouvez dans la branche vehicle.
Nous avons ce qu'il nous faut, maintenant lancez Git a la racine et y mettre cette commande :
Citation :git pull <adresse> <branche>
A remplacer bien sur par l'adresse (lien) et le nom de la branche, par exemple :
Citation :git pull git://github.com/Tasssadar/Valhalla-Project.git vehicle

Voilà, Git va essayer de fusionner votre répertoire et les modifications faites sur la branche vehicle. Avec de la chance vous n'aurez aucun problème, vous pouvez recompiler. Dans le cas contraire (message d'erreur) vous allez devoir corriger le code dans les fichiers indiqués, pour cela il vous faudra en général uniquement les bases du C++.

Vous devez impérativement re-compiler le core pour qu'il soit intégré à celui-ci.

6. En cas de problèmes.

Si vous avez des erreurs de ce genre :
Citation :C:\Program Files\Microsoft Visual Studio 9.0\VC\include\intrin.h(912) : error C2733: second C linkage of overloaded function '_interlockedbittestandset' not allowed
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\intrin.h(912) : see declaration of '_interlockedbittestandset'
Il va falloir modifier le fichier C:\Program Files\Microsoft Visual Studio 9.0\VC\include\intrin.h (selon votre emplacement d'installation).
Ouvrez le avec Notepad, trouvez :
Citation :__MACHINEI(unsigned char _interlockedbittestandset(long *a, long b))
__MACHINEI(unsigned char _interlockedbittestandreset(long *a, long b))
Et remplacez par :
Citation :// __MACHINEI(unsigned char _interlockedbittestandset(long *a, long b))
// __MACHINEI(unsigned char _interlockedbittestandreset(long *a, long b))
Voilà vous devriez pouvoir compiler correctement. Si vous ne pouvez toujours pas, attendez une mise à jour de MaNGOS (le temps que l'erreur soit corrigée si le problème vient de leur côté), lancez bien en mode administrateur et au pire des cas, réinstallez VCExpress.


INFORMATION IMPORTANTE
Tutoriel initialement réalisé par Nitrob, remis au gout du jour par Khira. Extrait de l'ancien forum de Zone-Emu sans aucune modifications. Il peut donc y avoir des informations trop anciennes...
Sujet original : http://old.zone-emu.fr/thread-7587.html.
Bonjour,

Lors de l'étape 4. a. Configurer et compiler pour le Core.
Une erreur apparait sous Microsoft Visual C++ 2010 Express.

"Impossible de démarrer le programme '...\master\win\VC100\.\gam__Win32_Release\game.lib'
Le fichier spécifié a un format binaire non reconnu ou non pris en charge."


Je ne trouve pas la source de l'érreur. Quelqu'un a une idée?.

Merci.

Retourner en haut Accueil