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

Quelques Informations sur le Pack Root


Metin2 Dev

Messages recommandés

  • Robot

Salut !

 

Je vais essayer de vous apprendre quelques trucs sur le root. C'est pas forcément obligatoire de le savoir, mais je pense que comprendre comment marche quelque chose c'est déjà important avant le modifier sans savoir exactement ce que l'on fait.


Bon, déjà le root c'est un pack. Mais un pack c'est quoi ?

Un pack est composé de deux fichiers : 

  • pack.eix --> contient une liste de fichiers (codée bien sûr) qui sont présents dans le .epk.
  • pack.epk --> est une archive, qui contient des fichiers compressés et parfois cryptés.

Mais c'est pas juste ça, car le root c'est le pack changé en premier par le client. Et c'est pas une histoire d'ordre dans l'index, car si vous regardez, vous n'aurez même pas le root dans votre Index. Oui, car c'est chargé directement par l'exe, c'est pour ça qu'on dit que ce pack est obligatoire. Après, si vous voulez vraiment le changer, rendez-vous dans vos sources, ouvrez le fichier UserInterface.cpp (qui est le premier fichier cpp chargé dans les sources client au passage) et cherchez : 

 

CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str());

Vous pourrez modifier le "root" comme bon vous semble, recompiler, et voir le résultat.


Maintenant, dans votre root, vous avez plusieurs fichiers. On va s'intéresser au fichier Python, .py (malgré que un dossier root rangé, il ne vous reste plus que .py et 1 txt il me semble).


Vous pouvez remarquer un grand nombre de fichier commence par "ui". Ces fichiers vont... hum... Disons, ils vont créer, définir le fonctionnement d'un système.  Prenons ici un exemple simple, ouvrons le uiselectmusic.py :

Bon, je ne compte pas vous expliquer les 200 lignes, mais les principales pour vous montrer le but, oui.

 

import app
import ui
import localeInfo
import uiScriptLocale

FILE_NAME_LEN = 20 
DEFAULT_THEMA = localeInfo.MUSIC_METIN2_DEFAULT_THEMA

Ici, nous importons :

  • Une librairie nommée app;
  • Un fichier Python nommé ui (se trouvant au passage dans le root);
  • Le fichier python localeInfo (se trouvant au passage dans le root);
  • le fichier uiScriptLocale(se trouvant également dans notre pack root);

Nous définissons ensuite une variable, FILE_NAME_LEN. On lui attribue comme valeur 20.

On définie ensuite "un raccourcie", c'est à dire que pour la suite, on pourra utiliser DEFAULT_THEMA au lieu d'utiliser : localeInfo.MUSIC_METIN2_DEFAULT_THEMA.

 

Bien, continuons :

On va sauter la classe item, car cela ne vous aidera pas à comprendre ce que je veux que vous compreniez, prenez directement la class PopupDialog(ui.ScriptWIndows):

 

Je voudrais ici que vous donniez un peu de votre attention à ceci :

 

	def __Load(self):
	try:
		pyScrLoader = ui.PythonScriptLoader()
		pyScrLoader.LoadScriptFile(self, "UIScript/PopupDialog.py")
	except:
		import exception
		exception.Abort("PopupDialog.__Load")

 

Ici, vous avez d'abord une fonction nommée __Load. 

    Elle essaye de :

       Définir que pyScrLoader défini maintenant ui.PuthonScriptLoader()

       Elle charge un fichier se trouvant dans le fichier UiScript (qui lui même se trouvez dans le fichier uiscript, mais ceci n'est pas indiqué en Python), le fichier PopupDialog.py

    Si il y a une erreur :

        On import le fichier python nommé exception.py (se trouve dans le root)

        On écrit une erreur : "

PopupDialog.__Load"

 

On va pour finir s'intéresser à une fonction très simple mais qui va vous faire comprendre que les fichiers ui, c'est le système en lui même :

 

	def __RefreshFileList(self):
	self.__ClearFileList()
	self.__AppendFile(DEFAULT_THEMA)
	self.__AppendFileList("mp3")

Ici, nous avons une fonction nommé __RefreshFileList.

 

Comme son nom l'indique, elle vous nous servir à mettre à jour, à rafraîchir la liste de musique se trouvant dans notre liste.

    Nous appelons ensuite une fonction qui vas nous servir à remettre la liste à 0

    Nous appelons ensuite une fonction qui désigne l'emplacement des musiques.

    Nous appelons encore et toujours une fonction qui défini défini le type des musiques en .mp3.

 

Et un fichier ui c'est ça, on va créer le système en lui même, alors que le design et les éléments eux, seront plus souvent définis dans le pack uiscript, dans les fichiers python.

 


 

Bref, reprenons.

 

Je voudrais maintenant qu'on se concentre un peu sur le fichier : system.py

Pourquoi ?

Tout simplement car c'est le tout premier fichier Python chargé dans le client, le deuxième étant le prototype.py.

 

A la fin du fichier vous pouvez retrouver :

 

RunMainScript("prototype.py")

--> Ce code va en quelque sorte, passer la main au prototype.py, ce n'est pas un simple import, le fichier prototype ne va pas tourner "sous la dépendance" du system.py.

 

 

C'est le system.py qui va définir les fonctions principales et nécessaire dès le début au démarrage du client. Les autres fichiers auraient bien du mal à fonctionné si vous le supprimiez... Que dis-je ? Ils ne fonctionneraient même pas du tout.

 


J'aimerais maintenant faire une petite aparté sur le fichier prototype.py :

Vous pouvez considérer que le system.py place des "règles" et des principes à notre client.

 

C'est bel et bien le prototype qui va se charger de démarrer les autres fichiers, de définir la phase de jeu. Effectivement, le prototype déclare directement que nous somme à la phase de connexion : 

 

mainStream.SetLoginPhase()

 

Notez que maintenant que le système à placer quelques règles, les imports deviennent assez conséquent :

 

import dbg
import app
import localeInfo
import wndMgr
import systemSetting
import mouseModule
import networkModule
import uiCandidate
import constInfo
import musicInfo
import stringCommander


 

Vous retrouverez aussi les fichiers locale/localeinfo.py

Il me semble que le fichier locale a été abandonné sur les 2014. A vérifier.

 

Vous trouverez dans ces fichiers principalement des variables qui ne changeront pas. C'est comme le fichier l'indique des informations locales.

 

Par exemple :

 

APP_TITLE = "Takuma"

C'est une variable qui va définir le nom de la fenêtre.

 

Vous trouverez aussi des informations sur les packs locales en fonction du pays (pour l'activer, d'autres modifications sont nécessaires il me semble :

 

__IS_ENGLISH	= "ENGLISH" == app.GetLocaleServiceName()	
__IS_HONGKONG	= "HONGKONG" == app.GetLocaleServiceName()
__IS_NEWCIBN	= "locale/newcibn" == app.GetLocalePath()
__IS_EUROPE		= "EUROPE" == app.GetLocaleServiceName()		
__IS_CANADA		= "locale/ca" == app.GetLocalePath()
__IS_BRAZIL		= "locale/br" == app.GetLocalePath()
__IS_SINGAPORE	= "locale/sg" == app.GetLocalePath()
__IS_VIETNAM	= "locale/vn" == app.GetLocalePath()
__IS_ARABIC		= "locale/ae" == app.GetLocalePath()
__IS_CIBN10		= "locale/cibn10" == app.GetLocalePath()
__IS_WE_KOREA	= "locale/we_korea" == app.GetLocalePath()
__IS_TAIWAN		= "locale/taiwan" == app.GetLocalePath()
__IS_JAPAN		= "locale/japan" == app.GetLocalePath()	

 

 

 


Bon, vous avez appris quelque chose ? Non ? Certains toujours pas ? :o  Vous me compliquez la tâche aussi !

 

 

Bah pour en apprendre plus, vous attendrez que je décide de refaire un autre tuto  !

 

Bon développement !

 

 

Cordialement, Takuma.

french_banner.gif

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
  • Réponses 1
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet



  • 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.