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

C++ - Permettre au jeu de savoir quand l'entrepôt s'Ouvre et se Ferme


Messages recommandés

  • Développeur

Centre de Téléchargement

Hidden Content

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

Bonjour, bonsoir,

 

Aujourd'hui, je vais vous présenter une fonction qui peut avoir plus ou moins d’intérêt pour tout un chacun ! En effet, cette fonction permet au jeu de savoir quand est-ce que la fenêtre d'entrepôt s'ouvre ou se ferme. À première vue, il y a peu d'utilité, mais dès lors que vous savez quoi en faire, cette fonction peut sévère immensément utile ! (Voir vidéo ci-bas)

 

Pré-requis:

Citer les tutoriels/connaissances/logiciels requis pour réaliser ce tuto

 

I. Quelques précisions

Révélation

 

  • Je ne suis pas l'auteur de cette fonction ! VegaS en est l'auteur et le code que je vous présente est le même code que celui qu'il a partagé, il est tel-quel ! Je ne fais que traduire le tutoriel.
  • Effectuez une sauvegarde préventive de vos fichiers ! Si jamais vous faites une erreur, toujours garder des fichiers antérieurs à la modification.
  • Cette fonction peut rendre vos scripts voire des scripts déjà existants plus spécifiques ! L'utilisation que vous ferez de cette fonction peut varier d'une personne à l'autre selon ses idées et ses compétences.

 

Aperçu de l'usage de cette modification :

 

 

 

II. Partie Sources Client

Révélation

 

A. Fichier PythonSafeBox.h (UserInterface)

Révélation
  • Cherchez :
        DWORD GetMallSize();
  • Ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        bool isOpen();
        void Close();
#endif

 

  • Cherchez :
        TItemInstanceVector m_MallItemInstanceVector;
  • Ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        bool    m_isOpenSafebox;
#endif

 

Vous pouvez sauvegarder et passez à la suite !

 

B. Fichier PythonSafeBox.cpp (UserInterface)

Révélation
  • Cherchez :
        { "GetMoney",                    safeboxGetMoney,                        METH_VARARGS },
  • Ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        { "isOpen",                        safeboxIsOpen,                            METH_VARARGS },
        { "Close",                        safeboxClose,                            METH_VARARGS },        
#endif

 

 

  • Cherchez
PyObject * safeboxGetMallSize(PyObject * poSelf, PyObject * poArgs)
{
    return Py_BuildValue("i", CPythonSafeBox::Instance().GetMallSize());
}
  • Ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
PyObject * safeboxIsOpen(PyObject * poSelf, PyObject * poArgs) {
    return Py_BuildValue("i", CPythonSafeBox::Instance().isOpen());
}

PyObject * safeboxClose(PyObject * poSelf, PyObject * poArgs) {
    CPythonSafeBox::Instance().Close();
    return Py_BuildNone();
}
#endif

 

 

  • Cherchez :
DWORD CPythonSafeBox::GetMallSize()
{
    return m_MallItemInstanceVector.size();
}
  • Ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
bool CPythonSafeBox::isOpen() {
    return m_isOpenSafebox;
}

void CPythonSafeBox::Close() {
    m_isOpenSafebox = false;
}
#endif

 

 

  • Cherchez
   m_ItemInstanceVector.clear();
  • Ajoutez en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
    m_isOpenSafebox = true;
#endif

 

 

  • Et enfin cherchez
CPythonSafeBox::CPythonSafeBox()
{
    m_dwMoney = 0;
}
  • Remplacez la fonction par :
CPythonSafeBox::CPythonSafeBox()
{
    m_dwMoney = 0;
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
    m_isOpenSafebox = false;
#endif
}

 

Sauvegardez & passez à la suite !

 

C. Fichier PythonApplicationModule.cpp (UserInterface)

Révélation
  • Cherchez :
#ifdef ENABLE_COSTUME_SYSTEM
    PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",    1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",    0);
#endif
  • Et ajoutez ceci en dessous :
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
    PyModule_AddIntConstant(poModule, "ENABLE_CHECK_IF_SAFEBOX_OPEN", 1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_CHECK_IF_SAFEBOX_OPEN", 0);
#endif

 

Sauvegardez & passez à la suite !

 

D. Fichier Locale_inc.h (UserInterface)

Révélation
  • Ajoutez ceci dans le fichier :
/**************************************************
* date        : 2016.08.23
* name        : Check from python if safebox is open
* author      : VegaS
*/    
#define ENABLE_CHECK_IF_SAFEBOX_OPEN
/**************************************************

Sauvegardez & compilez !

 

Succès ! Vous pouvez désormais recompiler votre lanceur !

 

 

III. Partie Client (Python)

Révélation

 

A. Fichier uiSafebox.py (root)

Révélation
  • Cherchez
    def CommandCloseSafebox(self):
        if self.tooltipItem:
            self.tooltipItem.HideToolTip()

        self.dlgPickMoney.Close()
        self.dlgChangePassword.Close()
        self.Hide()
  • Remplacez la fonction par :
    def CommandCloseSafebox(self):
        pList = [self.dlgPickMoney, self.dlgChangePassword, self]
        if self.tooltipItem:
            self.tooltipItem.HideToolTip()
        for a in pList:
            a.Hide()
        if app.ENABLE_CHECK_IF_SAFEBOX_OPEN:
            safebox.Close()

Sauvegardez & passez à la suite !

 

B. Fichier game.py (root)

Révélation
  • Implantez ce code (première partie là où les touches se situent, où vous voyez app.DIK_{TOUCHE}, la deuxième à la fin du fichier) :
        if app.ENABLE_CHECK_IF_SAFEBOX_OPEN:
            onPressKeyDict[app.DIK_F5]    = lambda : self.BINARY_Check_Safebox()
            
    if app.ENABLE_CHECK_IF_SAFEBOX_OPEN:
        def BINARY_Check_Safebox(self):
            import safebox
            if safebox.isOpen():
                chat.AppendChat(chat.CHAT_TYPE_INFO, "<<Debug de VegaS>> Entrepot ouvert !")
            else:
                chat.AppendChat(chat.CHAT_TYPE_INFO, "<<Debug de VegaS>> Entrepot ferme !")

Repackez et testez en jeu ! Quand vous appuierez sur F5, le jeu vous dira si votre entrepôt est ouvert ou fermé ! Désolé pour le manque d'accent dans le texte qui s'affichera, je l'ai fait par soucis d'affichage. Vous pourrez les rajouter dans la phrase finale dans le locale_game.txt / locale_inteface.txt si vous faites en sorte de les utiliser pour ce texte.

 

 

A savoir :

Si vous ne savez pas comment compiler votre lanceur veuillez suivre le tutoriel suivant Compiler le client Binary

Si vous ne savez pas comment depack votre client, suivez ce tutoriel Depack/Repack avec Eternexus

Si vous avez un problème n'hésitez pas à poster votre demande dans la section AQS

  • Metin2 Dev 2
  • Love 10
Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

C'est se compliquer un peu la tâche pour pas grand chose.

L'ajout d'une simple variable dans le constInfo modifiée à l'ouverture et fermeture de l'entrepôt suffirait, comme c'est le cas pour la variable isItemQuestionDialog.

 

Toutes ces modifications ne me semblent pas nécessaires.

L'utilisation que tu en fais est bonne cependant !

 

:ph34r:

  • Love 1
Lien vers le commentaire
Partager sur d’autres sites

  • Développeur

Bonsoir,

 

Premièrement merci à vous tous ! Sinon, pour répondre à @Cassegrain, c'est vrai que c'est plus simple de le faire via ConstInfo, mais dans un soucis d’ergonomie (c'est toujours mieux de le faire en C++) et d'utilité globale, la méthode via sources s'avère plus "durable". Notons aussi que si quelqu'un a un accès au root, il peut là aussi "fausser" la variable, bien qu'il n'y ait rien de critique à faire en touchant à ça.

 

D'ailleurs, je pense que dans la version C++, le jeu détecte quand l'entrepôt se ferme de manière non conventionnelle : Mort du personnage ou éloignement trop conséquent du magasinier. Tandis que dans la version python, le ConstInfo restera très probablement le même. Après, c'est à tester !

 

Merci beaucoup pour ton commentaire ainsi que pour l'alternative, qui est réalisable beaucoup plus simplement !

  • Love 1
Lien vers le commentaire
Partager sur d’autres sites

  • Développeur

Ah ? Personnellement en lisant sur Funky j'ai eu un petit saut dans la vidéo (elle s'est arrêtée et s'est relancée au même moment) un peu après les vingt secondes, mais normalement tout semble bien fonctionner ^^

 

Merci ! :D

Lien vers le commentaire
Partager sur d’autres sites

  • Robot

Le titre est assez imprécis, j'ai regardé très brièvement le code, et je ne suis pas familiarisée avec le Python, mais cela sert à savoir si Oui, ou non l'entrepôt est ouvert non ? Il ne crée pas un événement quand celui-ci se ferme si ?

 

Merci de ton partage.

 

french_banner.gif

Lien vers le commentaire
Partager sur d’autres sites

  • Développeur
Il y a 5 heures, Akihira a dit :

Le titre est assez imprécis, j'ai regardé très brièvement le code, et je ne suis pas familiarisée avec le Python, mais cela sert à savoir si Oui, ou non l'entrepôt est ouvert non ? Il ne crée pas un événement quand celui-ci se ferme si ?

Bonsoir,

 

Je ne savais pas trop comment exprimer de manière plus courte ce que ce système fait, il ne crée aucun événement mais sert bien, comme tu l'as dit, à créer une fonction qui sait reconnaître si l'entrepôt est ouvert ou non : "safebox.IsOpen()".

 

Il y a 5 heures, Akihira a dit :

Merci de ton partage.

 

Il y a 3 heures, ASIKOO a dit :

Gracias !

 

De rien ! :D

Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...
  • 9 mois après...
  • Robot
Le 09/01/2019 à 04:16, Abass a dit :

Il marche sur les files 2016 (saw) svp?

Je viens de installer mais je vois aucune difference. il porte et utilise les items.. :o

Lis le tutoriel entièrement. Ceci n'est qu'un exemple de comment exploiter la fonction importée...

 

A d'ajouter les deux trois conditions et la fonction nécessaire à l'envoie de l'item dans l'entrepôt. Ce n'est pas spécialement compliqué. Cherche par toi même.

  • Love 2

french_banner.gif

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 37
    2. 21

      Metin2 en 2020 peut-on en parler?

    3. 0

      METIN2Project

    4. 3

      Ressources - UnPack - Metin2 Client - Officiel

    5. 0

      Barre des tâches d'argent étendue

    6. 16

      Redémarrage automatique des channels

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