Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

Compiler le Client Binary


Messages recommandés

  • Retraité

Bonsoir !

Après une semaine à essayer de compiler le client de metin2, je vous fait un petit tutoriel.

Tout d'abord, il vous faut les sources de metin : ICI

Pour compiler le client, je vous conseille la branche novaline mais vous pouvez très bien utiliser la branche mainline.

Ensuite, vous conseille Visual Studio 2013, car le 2008 est foireux et vous risquez d'avoir des erreurs dans votre compilation (je parle en connaissance de cause :D ) Vous pouvez le télécharger ici:

http://www.01net.com/telecharger/windows/Internet/internet_utlitaire/fiches/127260.html

Etape 1, préparez son environnement

Une fois les sources et le logiciel téléchargé, ouvrez le.

Cliquez sur l'icône ouvrir un fichier et choisissez ce sln: Metin2Client_VC90.sln

Il se trouve dans Srcs\Client

060629visual-1.png

-----------------------------------------------------------------------

Maintenant, créez un dossier lib et include où vous voulez. Vous pouvez le faire à la racine de votre disque dur, sur le bureau, peu importe.

On va dans chaque dossier, mettre les fichiers nécessaire au code source.

DOSSIER LIB

Srcs\Tools\WorldEditor\extern\lib

Mettez le contenu de ce dossier, dans le dossier lib que vous avez créé.

Srcs\Extern\lib

Mettez le contenu de ce dossier, dans le dossier lib que vous avez créé.

DOSSIER INCLUDE

Srcs\Tools\WorldEditor\extern\include

Mettez le contenu de ce dossier, dans le dossier include que vous avez créé.

Srcs\Extern\include

Mettez le contenu de ce dossier, dans le dossier include que vous avez créé.

!/ N'hésitez surtout pas à remplacer /!

------------------------------------------------------------------------

Avant de lier vos dossier à votre code, je vous conseille de changer le mode de compilation. Personnellement, j'utilise le mod Release qui me permet d'avoir un lanceur d’environ 3200Ko

Pour changer le mod de compilation, faites un clic droit sur votre solution (votre .sln) dans visual studio puis cliquez sur propriété.

Allez dans Propriétés de configuration ---> Configuration.

Cliquez sur Gestionnaire de Configuration et dans configuration de la solution active, vous choisissez Release. Vos projets vont se mettre en Release, il vous reste juste à fermer la fenêtre et cliquer sur OK.

------------------------------------------------------------------------

Maintenant, il faut lier chaque projet de votre solution à vos dossiers. Faites un clic droit sur UserInterface puis cliquez sur Propriété.

064809visual-2.png

Allez dans Configuration ---> Vc++ et dans répertoire include, vous choisissez votre dossier include, comme sur le screen.

Dans Répertoires de bibliothèques, vous choisissez votre dossier lib.

Vous faites exactement la même chose pour les 15 autres projets (EterPack, EterLib, etc ...)

------------------------------------------------------------------------

Maintenant il vous suffit juste d'appuyer sur ces touches pour compiler (en même temps): CTRL +  SHIFT + B

Pour recompiler le client, faites un clic droit sur la solution puis: Régénérer la solution

Malheureusement, la compilation est assez longue. Le .exe final se trouvera dans le dossier /UserInterface/Release

Les erreurs fréquentes

Impossible d'ouvrir mon sln

Votre sln n'utilise juste pas le bonne version.

Vous pouvez résoudre ce problème tout simplement.

Éditez avec NotePad votre SLN et à la place de:

Microsoft Visual Studio Solution File, Format Version 12.00

# Visual Studio 2013

Mettez(si vous utilisez Visual 2008):

Microsoft Visual Studio Solution File, Format Version 9.00

# Visual Studio 2008

Ca varie en fonction de la version de votre IDE, pensez à bien le retenir :)

16>.AffectFlagContainer.cpp(68 ) : error C2440: 'initializing' : cannot convert from 'CAffectFlagContainer::Element' to 'char &'




16>.\AffectFlagContainer.cpp(68 ) : error C2440: 'initializing' : cannot convert from 'CAffectFlagContainer::Element' to 'char &'
Cliquez deux fois sur CAffectFlagContainer et cela va vous amener à un BYTE. Faites clic droit sur BYTE et cliquez sur Atteindre la définition

Il suffit juste de remplacer char par unsigned char.

6>.PythonGraphic.cpp(294) : error C2664: 'CPythonGraphic::SaveJPEG' : cannot convert parameter 2 from 'char *' to 'LPBYTE'





6>.\PythonGraphic.cpp(294) : error C2664: 'CPythonGraphic::SaveJPEG' : cannot convert parameter 2 from 'char *' to 'LPBYTE'
Double cliquez sur l'erreur et ça va vous amener sur la ligne de l'erreur. Effacez cette ligne et mettez:




bool bSaved = SaveJPEG(c_pszFileName, (LPBYTE)pbyBuffer, uWidth, uHeight);
Erreur Python

Il arrive parfois, si vous utilisez Python-2.2, vous ayez une erreur. La même chose pour Python2.7. Trouvez donc dans un premier temps, l'erreur qui concerne cette ligne:






PyAPI_FUNC(struct symtable *) PySymtable_Build(mod_ty, const char *, PyFutureFeatures *);
Et commentez la. (Pour commenter: //commentaire)

module' object has no attribute 'EQUIPMENT_RING1

Erreur Sysser







'module' object has no attribute 'EQUIPMENT_RING1'
Dans le fichier: Locale_inc.h.

Vous supprimez tout et vous mettez:







#define LOCALE_SERVICE_SINGAPORE
#define ENABLE_COSTUME_SYSTEM
#define ENABLE_ENERGY_SYSTEM
#define ENABLE_DRAGON_SOUL_SYSTEM
#define ENABLE_NEW_EQUIPMENT_SYSTEM
16>cryptlib-5.6.1MTd.lib(iterhash.obj) : error LNK2001: unresolved external symbol \"void __cdecl std::_Xbad_alloc(void)" (?_Xbad_alloc@std@@YAXXZ)







16>cryptlib-5.6.1MTd.lib(iterhash.obj) : error LNK2001: unresolved external symbol "void __cdecl std::_Xbad_alloc(void)" (?_Xbad_alloc@std@@YAXXZ)
Si vous avez des erreurs avec la lib Cryptlib-5.6.1MT, il faut recompiler cette lib.

Pour se faire, avec Visual Studio, ouvrez le fichier cryptlib.2008.sln qui se trouve dans le dossier: Srcs\Extern\cryptopp

Vous importez la solution, vous compilez avec CTRL + SHIFT + B et une fois terminé, la lib se trouvera dans Srcs\Extern\lib.

Sous le nom de: cryptlib-5.6.1MTd.lib

Attention ! Il faut compiler la lib en MT et sur le même toolset que le client !

Dans tous les cas, vous pouvez très simplement trouver cette lib avec la date du fichier.

5>mss32.lib(mss32.dll) : error LNK2026: module unsafe pour l'image SAFESEH.









5>mss32.lib(mss32.dll) : error LNK2026: module unsafe pour l'image SAFESEH.
Il suffit de désactiver / SAFESEH.

Pour cela, clique droit sur UserInterface, propriétés puis cliquez sur éditeur de liens, allez dans avancé puis sur la ligne Image avec gestionnaire d'exceptions sécurisés, vous mettez non.

Vous régénérez la solution, et le tour est joué :)

TraceBack - Error: Bad magic number in lib libtraceback.pyc

L'erreur dans la fenêtre LOG:










TraceBack - Error: Bad magic number in lib lib\traceback.pyc
 

044111log.png

Le soucis vient du fait que votre lanceur est dans une certaine version de python alors que vos libs (Dans client, le dossier lib) utilisent une autre version de Python.

En fait, on peut appeler le magic number, une clé pong mais avec un contexte bien différent.

Vos libs, quand vous les éditez en HEXA, contiennent le nombre magique correspondant à votre python.dll

python27.dll a son propre magic number tout comme python22. C'est une sorte de laison.

Pour résoudre ce problème, vous avez deux choix: Passez vos libs client à la version python de votre lanceur ou alors compiler votre lanceur avec la version Python correspondant à votre client.

TraceBack

Hé oui, vous pouvez aussi avoir une fenêtre d'erreur mais juste avec l'erreur TraceBack.

Cela signifie qu'un de votre dossier pack n'est pas apte à prendre en compte ce lanceur compilé (je simplifie, sinon j'écris un topic sur cette erreur). En gros c'est que vos fichiers n'utilisent pas les bonnes fonctions.

Dans ce cas, je vous conseille de télécharger ce client: ICI

Vous essayez de prendre les fichiers root et voir si votre client se lance sans cette erreur. (vous faites vos modif après)

Si root ne fonctionne pas, essayé locale_* ou alors essayez uiscript. Il y en a bien un qui va résoudre votre soucis. La plus part du temps, c'est root.

LoginWindow.__LoadScript.LoadObject - :Python int too large to convert to C long

À l'entête du fichier: PythonUtils.cpp, ajoutez:

#define PyLong_AsLong PyLong_AsLongLong

#define PyLong_AsUnsignedLong PyLong_AsUnsignedLongLong

Vous pouvez apprendre à passer de Python 2.2 à Python 2.7 grâce à ce tutoriel : ICI

Source: Moi et en m'aidant de m2d pour la correction de certaines erreurs

  • Metin2 Dev 3
  • Angry 1
  • Good 2
  • Love 123
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...
  • Funkiest

Salut,

 

merci pour le tuto.

 

Mes y a d'autre erreur que tu n'a pas indiquer et qui persiste.

Je suis pas douer en C, donc .. x)

Galet dira pas le contraire :D

 

Il ne peut pas indiquer TOUTES les erreurs possible dans un fichier de plusieurs giga, tout cela dépend de la version, des includes, des libs, de la version du compilateur, des options et des fautes etc... :x

Lien vers le commentaire
Partager sur d’autres sites

Tous le monde pars avec les fichier de base comme il a indiquer tout en haut en donnant le lien vers le poste de kijaru.

Ensuite il a fait avec la branche novaline.

Donc, vue qu'on n'a les même fichier, le même compilateur (Visual Studio 2013).

Et donc aussi le même dossier includes & lib.

 

On n'a donc normalement les même erreurs.

Je vois pas pourquoi y aurai que moi dans ce cas :).

Et je demande pas TOUTE les erreur, juste celle qui enpêche la compilation (qui est le bute du poste)

Je n'en n'est que 46, qui sont la plus part du temps toute les même.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

  • Funkiest

Tous le monde pars avec les fichier de base comme il a indiquer tout en haut en donnant le lien vers le poste de kijaru.

Ensuite il a fait avec la branche novaline.

Donc, vue qu'on n'a les même fichier, le même compilateur (Visual Studio 2013).

Et donc aussi le même dossier includes & lib.

 

On n'a donc normalement les même erreurs.

Je vois pas pourquoi y aurai que moi dans ce cas :).

Et je demande pas TOUTE les erreur, juste celle qui enpêche la compilation (qui est le bute du poste)

Je n'en n'est que 46, qui sont la plus part du temps toute les même.

 

Merci

 

J'ai VS2013, Kijaru aussi, et moi je dois linker des choses que Kijaru ne doit pas linker, j'ai aussi des erreurs que lui n'a pas et inversement. ^^

Lien vers le commentaire
Partager sur d’autres sites

Kijaru a pas les fichier de base.

Vue tous se qui dis qu'il fait dessus.

C'est tous a fais normal.

Moi je parle du novaline de BASE.

C'est obliger qu'on n'est les même erreur si on n'a les même fichier.

Calypso ma dis qu'elle avait pris le novaline est qu'elle a écris ici les erreur qu'elle a rencontrer.

Je suppose que pour le python, elle a peut-être donner 1, et pas toutes.

 

Donc je parle bien de base, et pas de version modifier comme tu as avec kijaru.

Lien vers le commentaire
Partager sur d’autres sites

  • Funkiest

Kijaru a pas les fichier de base.

Vue tous se qui dis qu'il fait dessus.

C'est tous a fais normal.

Moi je parle du novaline de BASE.

C'est obliger qu'on n'est les même erreur si on n'a les même fichier.

Calypso ma dis qu'elle avait pris le novaline est qu'elle a écris ici les erreur qu'elle a rencontrer.

Je suppose que pour le python, elle a peut-être donner 1, et pas toutes.

 

Donc je parle bien de base, et pas de version modifier comme tu as avec kijaru.

 

Tu es vraimment compliqué, je t'explique.

 

Avec Kijaru on travaille sur plusieures sources, dont certaines DE BASE, je fais te faire un shema.

 

Un même tool, on a le même, Kija a eu des erreurs, les a résolues (ça se dit?), il a compilé.

Moi de la même source j'en ai eu des différentes.

 

Un autre.

 

Je trouve des sources, j'lui envoie avant de dll car il a une meilleure co, il compile, ça fonctionne.

Je prend les mêmes, des erreurs, je corrige (pas finis), ça compile, ça fonctionne.

 

Les erreurs peuvent dépendre de plusieurs facteurs différents, comme je l'ai dis plus haut, sinon je ne voit pas ocmment car on a la même manip : Clique droit, clean, build.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 2 mois après...

Merci à toi pour ce tutoriel ceci étant dit je tiens a apporter quelques précisions.

 

-Le mode Release permet surtout d'avoir le jeu en mode final et donc pour un serveur public, sans console, sans crash, sans erreur C+ visuel C Net

 

-Je déconseil l'update sur le dernier Granny et Direct X provoquant des bugs massifs sur le graphisme et les petits cartes graphiques.

Lien vers le commentaire
Partager sur d’autres sites

  • Funkiest

Si c'est bien fait, l'update ne provoque pas de bugs quels qu'ils soient, du moins après avoir testé sur un panel allant d'une GTX 770 à un chipset de 64mo, je n'ai pas de bugs (sauf les lags normaux dus à la limite de capacité de la carte, qui partent une fois que les paramètres sont bien réglés).

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 21

      Metin2 en 2020 peut-on en parler?

    2. 0

      METIN2Project

    3. 3

      Ressources - UnPack - Metin2 Client - Officiel

    4. 0

      Barre des tâches d'argent étendue

    5. 16

      Redémarrage automatique des channels

    6. 16

      Multi Logo GM / SGM / GA

    7. 0

      comment extraire les fichiers locale.epk locale.eix sur le serveur officiel ?

    8. 2

      Funky-emu.net -> fr.metin2.dev

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.