Afin de télécharger un contenu sur un Tutoriel / Partage vous devez être connecté à votre compte et donner une réaction au sujet pour débloquer le lien de téléchargement...
Gurgarath

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

Recommended Posts

Niveau requis Intermédiaire

Temps estimé : Entre 10 et 15 minutes

 

Réécriture by Xayah

 

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

  • Like 8

Share this post


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

  • Like 1

Share this post


Link to post
Share on other sites

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 !

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

 

Share this post


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

Share this post


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

  • Like 1

Share this post


Link to post
Share on other sites