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

Python - Afficher les Statistiques via une GUI


Messages recommandés

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Bonjour à toutes et à tous !

 

 J'ai fais quelques recherches sur ce forum mais je n'ai rien trouvé à ce sujet donc je vais vous expliquer comment mettre en place une GUI (Graphical User Interface) montrant les statistiques sans passer par une quête. Bien sûr, il y a possibilité de désactiver ou réactiver l'affichage de cette interface à tout moment à l'aide d'une petite quête.

 Bref, au travail !

 Pour commencer vous aurez besoin de dépack le fichier "root" afin d'avoir accès au fichier "game.py" puis ouvrez le. Petite précision:

le copier-coller c'est pas terrible vu que le python n'aime pas les espaces.

Donc si vous avez des problèmes à la fin du tuto, remplacez les espaces par des tabulations.

/!\La quête est nécessaire pour afficher l'interface/!\

 Cherchez la ligne:

self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())

Puis faites un copier/coller de ceci:

	        #START_KILLGUI
	KillGuiBg = ui.AniImageBox()
	KillGuiBg.AppendImage("d:/ymir work/ui/blue_killgui_interface.tga")
	self.KillGuiBg = KillGuiBg

	self.KillGuiBg.SetPosition(wndMgr.GetScreenWidth()-235,185)

	self.KillBlauReich = ui.TextLine()
	self.KillBlauReich.SetDefaultFontName()
	self.KillBlauReich.SetPosition((wndMgr.GetScreenWidth()-285)+120, 412)
	self.KillBlauReich.SetText("Royaume bleu:   NaN")
	self.KillBlauReich.SetOutline()

	self.KillGelbReich = ui.TextLine()
	self.KillGelbReich.SetDefaultFontName()
	self.KillGelbReich.SetPosition((wndMgr.GetScreenWidth()-289)+120, 332)
	self.KillGelbReich.SetText("Royaume jaune:    NaN")
	self.KillGelbReich.SetOutline()

	self.KillRotReich = ui.TextLine()
	self.KillRotReich.SetDefaultFontName()
	self.KillRotReich.SetPosition((wndMgr.GetScreenWidth()-289)+120, 255)
	self.KillRotReich.SetText("Royaume Rouge:    NaN")
	self.KillRotReich.SetOutline()

	self.KillMob = ui.TextLine()
	self.KillMob.SetDefaultFontName()
	self.KillMob.SetPosition((wndMgr.GetScreenWidth()-268)+120, 490)
	self.KillMob.SetText("Monstre:    NaN")
	self.KillMob.SetOutline()
	##END_KILLGUI
Cherchez maintenant la ligne:
serverCommandList={

Puis faites un copier/coller de ceci:

##KILLGUI
		"ShowKillGui"			: self.__showkillgui,
		"HideKillGui"			: self.__hidekillgui,
		"KillBlauReich"			: self.__KillBlauReich,
		"KillGelbReich"			: self.__KillGelbReich,
		"KillRotReich"			: self.__KillRotReich,
		"KillMob"			: self.__KillMob,
		##END_KILLGUI

 

Maintenant, allez à la fin de votre fichier game.py, personnellement je l'ai mis au dessus de cette ligne:

def __ProcessPreservedServerCommand(self):

Lorsque vous avez repéré cette ligne, faites un copier/coller de ceci:

def __hidekillgui(self):
	self.KillGuiBg.Hide()
	self.KillBlauReich.Hide()
	self.KillGelbReich.Hide()
	self.KillRotReich.Hide()
	self.KillMob.Hide()

def __showkillgui(self):
	self.KillGuiBg.Show()
	self.KillBlauReich.Show()
	self.KillGelbReich.Show()
	self.KillRotReich.Show()
	self.KillMob.Show()

def __KillBlauReich(self, KillBlauReich):
	self.KillBlauReich.SetText("Royaume bleu            " + KillBlauReich)

def __KillGelbReich(self, KillGelbReich):
	self.KillGelbReich.SetText("Royaume jaune            " + KillGelbReich)

def __KillRotReich(self, KillRotReich):
	self.KillRotReich.SetText("Royaume rouge           " + KillRotReich)

def __KillMob(self, KillMob):
	self.KillMob.SetText("Monstre                " + KillMob)

 Repackez votre fichier root.

 Vous devez maintenant extraire "etc" pour avoir accès à votre dossier "ui"

 Téléchargez ce fichier:

Hidden Content

    Give reaction to this post to see the hidden content.

 

Placez le dans le dossier "ui"

d:/ymir work/ui/blue_killgui_interface.tga

  Ouvrez le fichier "etc_repack.xml" et ajoutez cette ligne:

depack\ymir work\ui\blue_killgui_interface.tga

Sauvegardez et repackez "etc"

 

 Le côté client est terminé ! maintenant il faut implanter la quête permettant de cacher ou afficher l'interface.

 Allez dans le dossier "quest" via winscp ou filezilla. Créez un fichier nommé:

kill_gui.quest

Puis ajoutez la quête au fichier:

quest killgui begin 
   state start begin 
       when kill begin 
           if npc.is_pc() then 
               local new_point = pc.getqf("empire"..npc.get_empire())+1 
               pc.setqf("empire"..npc.get_empire(), new_point) 
               cmdchat("KillRotReich "..pc.getqf("empire1")) 
               cmdchat("KillGelbReich "..pc.getqf("empire2")) 
               cmdchat("KillBlauReich "..pc.getqf("empire3")) 
           else 
               local new_point = pc.getqf("mob")+1 
               pc.setqf("mob", new_point) 
               cmdchat("KillMob "..pc.getqf("mob")) 
           end 
       end 
       when login begin 
           if pc.getqf("showkillgui") == 1 then 
               cmdchat("ShowKillGui") 
               cmdchat("KillRotReich "..pc.getqf("empire1")) 
               cmdchat("KillGelbReich "..pc.getqf("empire2")) 
               cmdchat("KillBlauReich "..pc.getqf("empire3")) 
               cmdchat("KillMob "..pc.getqf("mob")) 
           else 
               cmdchat("HideKillGui") 
           end 
       end 
       when letter begin 
           send_letter("Statistiques") 
       end 
       when info or button begin 
           say_title("Statistiques") 
           say("Voulez-vous désactiver l'affichage de vos") 
           say("statistiques ?")
		say("Les personnes ou mobs tués seront tout de même")
		say("comptabilisés. Vous pourrez réactiver à tout moment")
		say("l'affichage des statistiques.")
		local janein = select("Afficher", "Cacher") 
           if janein == 2 then 
               pc.setqf("showkillgui", 0) 
               cmdchat("HideKillGui") 
           else 
               pc.setqf("showkillgui", 1) 
               cmdchat("ShowKillGui") 
               cmdchat("KillRotReich "..pc.getqf("empire1")) 
               cmdchat("KillGelbReich "..pc.getqf("empire2")) 
               cmdchat("KillBlauReich "..pc.getqf("empire3")) 
               cmdchat("KillMob "..pc.getqf("mob")) 
           end 
       end 
   end 
end  

Ajoutez le fichier à filezilla ou winscp puis ouvrez le fichier:

locale_list

et ajoutez cette ligne:

kill_gui.quest

(N'oubliez pas de laisser une ligne vide en dessous de la dernière ligne ajoutée)

 Sauvegardez puis recompilez la quête.

 Dans la liste des quêtes vous verrez la quête "Statistiques" cliquez dessus puis activez l'affichage de la GUI, le tour est joué !

Petit plus !

 

Il y a en tout 5 interfaces (en comptant celle-ci) j'ai choisis de vous partager cette interface car je trouve que c'est la plus belle, mais après chacun ses goûts.

Téléchargement:

Hidden Content

    Give reaction to this post to see the hidden content.

Téléchargement: https://mega.co.nz/#!PIJX1KgR!NU1RYBHXkQ1IJBRfW_ugBQqroWNAcVofY2dsbFVzhQ8

 

Pour changer d'interface, renommez le fichier téléchargé en "blue_killgui_interface.tga" puis déplacez le ici en remplaçant l'ancienne interface si besoin est:

d:/ymir work/ui/blue_killgui_interface.tga

Changer l'emplacement de l'écriture

Si vous changez d'interface, vous aurez sans doute besoin de régler la position du texte.

Ouvrez le fichier "game.py" puis cherchez la ligne:

self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())

Vous verrez donc les coordonnées de chaque ligne:

Si vous souhaitez changer le texte, c'est simple. Cherchez la ligne:

def __hidekillgui(self):

Laisser la GUI affichée après chaque téléportation:

Merci à Spark pour la modification du python et de la quête !

Pour commencer, remplacez la quête implantée précédemment par celle-ci:

quest killgui begin
   state start begin
       when kill begin
           if npc.is_pc() then
               local new_point = pc.getqf("empire"..npc.get_empire())+1
               local tab = {"KillRotReich", "KillGelbReich", "KillBlauReich"}
               pc.setqf("empire"..npc.get_empire(), new_point)
               cmdchat(tab[npc.get_empire()].." "..new_point)
           else
               local new_point = pc.getqf("mob")+1
               pc.setqf("mob", new_point)
               cmdchat("KillMob "..new_point)
           end
       end
       when login begin
           cmdchat("ShowKillGui")
           cmdchat("KillRotReich "..pc.getqf("empire1"))
           cmdchat("KillGelbReich "..pc.getqf("empire2"))
           cmdchat("KillBlauReich "..pc.getqf("empire3"))
           cmdchat("KillMob "..pc.getqf("mob"))
       end
   end
end

Allez dans vitre game.py puis remplacez:

"ShowKillGui"            : self.__showkillgui,

Par:

"ShowKillGui"            : self.__showkillgui2,

Remplacez ensuite:

 def __hidekillgui(self):
       self.KillGuiBg.Hide()
       self.KillBlauReich.Hide()
       self.KillGelbReich.Hide()
       self.KillRotReich.Hide()
       self.KillMob.Hide()

Par:

def __showkillgui2(self):
       constInfo.killgui = 1
       self.KillGuiBg.Show()
       self.KillBlauReich.Show()
       self.KillGelbReich.Show()
       self.KillRotReich.Show()
       self.KillMob.Show()

Repackez votre root puis testez !

Merci à Spark !

 

Afficher/cacher l'interface à l'aide d'un raccourcis (F5)Passer par une quête à chaque fois pour afficher ou cacher l'interface peut être assez chiant, voilà la solution: un raccourcis sur la touche F5 !

Ouvrez le fichier game.py de votre root puis allez à la fin de votre fichier pour trouver ces lignes:

  Remplacez donc:

def __hidekillgui(self):
	self.KillGuiBg.Hide()
	self.KillBlauReich.Hide()
	self.KillGelbReich.Hide()
	self.KillRotReich.Hide()
	self.KillMob.Hide()

def __showkillgui(self):
	self.KillGuiBg.Show()
	self.KillBlauReich.Show()
	self.KillGelbReich.Show()
	self.KillRotReich.Show()
	self.KillMob.Show()

Par ceci:

def __hidekillgui(self):
	self.KillGuiBg.Hide()
	self.KillBlauReich.Hide()
	self.KillGelbReich.Hide()
	self.KillRotReich.Hide()
	self.KillMob.Hide()

def __showkillgui(self):
	if constInfo.killgui == 0:
		constInfo.killgui = 1
		self.KillGuiBg.Show()
		self.KillBlauReich.Show()
		self.KillGelbReich.Show()
		self.KillRotReich.Show()
		self.KillMob.Show()
	elif constInfo.killgui == 1:
		constInfo.killgui = 0
		self.KillGuiBg.Hide()
		self.KillBlauReich.Hide()
		self.KillGelbReich.Hide()
		self.KillRotReich.Hide()
		self.KillMob.Hide()

Cherchez la ligne:

onPressKeyDict[app.DIK_F4]	= lambda : self.__PressQuickSlot(7)

Puis ajoutez en dessous:

onPressKeyDict[app.DIK_F5]	= lambda : self.__showkillgui()

(ne rien ajouter dans la parenthèse en fin de ligne)

 

Sauvegardez puis quittez le fichier game.py. Toujours dans root ouvre le fichier "constinfo.py"

 Cherchez la ligne:

PVPMODE_PROTECTED_LEVEL = 30

(la valeur à la fin de cette ligne peut changer)

 Puis en dessous ajoutez cette ligne:

killgui	= 0

Sauvegardez, repackez et en jeu, appuyez sur F5 !

Après ça on a toujours besoin de la quête, donc ne la supprimez pas !

 Optimisé pour l'interface V4 (avec raccourcis)

Je me suis intéressé à la version 4 de l'interface, voilà donc les emplacements que je trouve optimaux pour cet interface:

/!\Vous devez avoir installé le raccourcis de la partie juste au dessus/!\

En dessous de la ligne:

self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())

Mettre ceci:

##START_KILLGUI
	KillGuiBg = ui.AniImageBox()
	KillGuiBg.AppendImage("d:/ymir work/ui/blue_killgui_interface.tga")
	self.KillGuiBg = KillGuiBg

	self.KillGuiBg.SetPosition(wndMgr.GetScreenWidth()-245,171)

	self.KillBlauReich = ui.TextLine()
	self.KillBlauReich.SetDefaultFontName()
	self.KillBlauReich.SetPosition((wndMgr.GetScreenWidth()-285)+120, 445)
	self.KillBlauReich.SetText("Royaume bleu:   NaN")
	self.KillBlauReich.SetOutline()

	self.KillGelbReich = ui.TextLine()
	self.KillGelbReich.SetDefaultFontName()
	self.KillGelbReich.SetPosition((wndMgr.GetScreenWidth()-289)+120, 340)
	self.KillGelbReich.SetText("Royaume jaune:    NaN")
	self.KillGelbReich.SetOutline()

	self.KillRotReich = ui.TextLine()
	self.KillRotReich.SetDefaultFontName()
	self.KillRotReich.SetPosition((wndMgr.GetScreenWidth()-289)+120, 231)
	self.KillRotReich.SetText("Royaume Rouge:    NaN")
	self.KillRotReich.SetOutline()

	self.KillMob = ui.TextLine()
	self.KillMob.SetDefaultFontName()
	self.KillMob.SetPosition((wndMgr.GetScreenWidth()-268)+120, 557)
	self.KillMob.SetText("Monstre:    NaN")
	self.KillMob.SetOutline()
	##END_KILLGUI

Puis au dessus de la ligne:

def __ProcessPreservedServerCommand(self):

Ceci:

def __hidekillgui(self):
	self.KillGuiBg.Hide()
	self.KillBlauReich.Hide()
	self.KillGelbReich.Hide()
	self.KillRotReich.Hide()
	self.KillMob.Hide()

def __showkillgui(self):
	if constInfo.killgui == 0:
		constInfo.killgui = 1
		self.KillGuiBg.Show()
		self.KillBlauReich.Show()
		self.KillGelbReich.Show()
		self.KillRotReich.Show()
		self.KillMob.Show()
	elif constInfo.killgui == 1:
		constInfo.killgui = 0
		self.KillGuiBg.Hide()
		self.KillBlauReich.Hide()
		self.KillGelbReich.Hide()
		self.KillRotReich.Hide()
		self.KillMob.Hide()

def __KillBlauReich(self, KillBlauReich):
	self.KillBlauReich.SetText("                        " + KillBlauReich)

def __KillGelbReich(self, KillGelbReich):
	self.KillGelbReich.SetText("                        " + KillGelbReich)

def __KillRotReich(self, KillRotReich):
	self.KillRotReich.SetText("                         " + KillRotReich)

def __KillMob(self, KillMob):
	self.KillMob.SetText("                 " + KillMob)

Repackez votre fichier root et c'est bon.

 

 Optimisé pour l'interface V5 (avec raccourcis) Par LordGune

Nul besoin de faire tout un pitch pour expliquer comment mettre ce changement:

 

  #START_KILLGUI
       KillGuiBg = ui.AniImageBox()
       KillGuiBg.AppendImage("d:/ymir work/ui/blue_killgui_interface.tga")
       self.KillGuiBg = KillGuiBg

       self.KillGuiBg.SetPosition(wndMgr.GetScreenWidth()-235,185)

       self.KillBlauReich = ui.TextLine()
       self.KillBlauReich.SetDefaultFontName()
       self.KillBlauReich.SetPosition((wndMgr.GetScreenWidth()-207)+120, 458)
       self.KillBlauReich.SetText("Bleue Tuer:   NaN")
       self.KillBlauReich.SetOutline()

       self.KillGelbReich = ui.TextLine()
       self.KillGelbReich.SetDefaultFontName()
       self.KillGelbReich.SetPosition((wndMgr.GetScreenWidth()-209)+120, 354)
       self.KillGelbReich.SetText("Jaune Tuer:    NaN")
       self.KillGelbReich.SetOutline()

       self.KillRotReich = ui.TextLine()
       self.KillRotReich.SetDefaultFontName()
       self.KillRotReich.SetPosition((wndMgr.GetScreenWidth()-209)+120, 246)
       self.KillRotReich.SetText("Rouge Tuer:    NaN")
       self.KillRotReich.SetOutline()

       self.KillMob = ui.TextLine()
       self.KillMob.SetDefaultFontName()
       self.KillMob.SetPosition((wndMgr.GetScreenWidth()-215)+120, 572)
       self.KillMob.SetText("Monstre:    NaN")
       self.KillMob.SetOutline()
       ##END_KILLGUI

Merci à LordGune pour avoir partagé cette version optimisée !

 

 Sources: Tuto, screens, adaptation de l'interface/écriture, (petite) traduction de la quête entièrement par moi. Le reste est de ©ChaoSS sur epvp. L'option "raccourcis" provient de "ToBii™" sur epvp. GUI v5 par .ωєιя∂ sur epvp.

 

J'espère ne rien avoir oublié. Bon jeu à tous et bonne chance !

Source : Craven

 

 

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

  • 4 mois après...
  • 2 mois après...
  • 2 semaines 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

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