Jump to content
×
×
  • Create New...

Compiler le Client Binary


Recommended Posts

  • 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)" ([email protected]@@YAXXZ)






16>cryptlib-5.6.1MTd.lib(iterhash.obj) : error LNK2001: unresolved external symbol "void __cdecl std::_Xbad_alloc(void)" ([email protected]@@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

  • Funky Emulation 3
  • J'adore 122
  • J'aime 2
  • Grrr... 1
Link to comment
Share on other sites

  • 2 months later...
  • 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

Link to comment
Share on other 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

Link to comment
Share on other 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. ^^

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other sites

  • Funkiest

Non, pas forcément: une simple modification des paramètres de démarrage de Visual Studio lors de l'installation ou du premier lancement modifient des paramètres, et par conséquent ajoutent ou enlèvent des erreurs.

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...

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.

Link to comment
Share on other 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).

Link to comment
Share on other sites

  • 2 months later...

6e7370259a.png

 

include

 

211bb668f4.png

 

lib

 

ff69eb4f9f.png

 

 

 

The problem is resolved

 

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

char par unsigned char.

Link to comment
Share on other sites

 Share



Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.