Aller au contenu

Nouveau membre ?! Pense à te présenter pour accéder au contenu du forum !

New member ?! Introduce yourself to get access to the forum !

Gurgarath

 tutoriel / partage [C++]Permettre au jeu de savoir quand l'entrepôt s'ouvre et se ferme

Messages recommandés

Posté(e) (modifié)

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)

 


Avant de commencer, quelques précisions :

 

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

 


 

C'est parti !

 

Révélation

Rendez vous dans le fichier : UserInterface/PythonSafeBox.h

 

1. Cherchez :

        DWORD GetMallSize();

2. Puis ajoutez en dessous :

#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        bool isOpen();
        void Close();
#endif

3. Cherchez :

        TItemInstanceVector m_MallItemInstanceVector;

4. Ajoutez en dessous :

#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        bool    m_isOpenSafebox;
#endif

5. Enregistrez et fermez le fichier, puis passez au suivant !

 

Rendez vous dans le fichier : UserInterface/PythonSafeBox.cpp

 

1. Cherchez :

        { "GetMoney",                    safeboxGetMoney,                        METH_VARARGS },

2. Puis ajoutez dessous :

#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
        { "isOpen",                        safeboxIsOpen,                            METH_VARARGS },
        { "Close",                        safeboxClose,                            METH_VARARGS },        
#endif

3. Cherchez :

PyObject * safeboxGetMallSize(PyObject * poSelf, PyObject * poArgs)
{
    return Py_BuildValue("i", CPythonSafeBox::Instance().GetMallSize());
}

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

5. Cherchez :

DWORD CPythonSafeBox::GetMallSize()
{
    return m_MallItemInstanceVector.size();
}

6. Ajoutez en dessous :

#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
bool CPythonSafeBox::isOpen() {
    return m_isOpenSafebox;
}

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

7. Cherchez :
 

    m_ItemInstanceVector.clear();

8. Ajoutez dessous :



#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
    m_isOpenSafebox = true;
#endif

9. Cherchez :

CPythonSafeBox::CPythonSafeBox()
{
    m_dwMoney = 0;
}

10. Remplacez par :

CPythonSafeBox::CPythonSafeBox()
{
    m_dwMoney = 0;
#ifdef ENABLE_CHECK_IF_SAFEBOX_OPEN
    m_isOpenSafebox = false;
#endif
}

11. Enregistrez, fermez et passez au fichier suivant :

 

Rendez vous dans le fichier : UserInterface/PythonApplicationModule.cpp

 

1. Cherchez :

#ifdef ENABLE_COSTUME_SYSTEM
    PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",    1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",    0);
#endif

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

3. Enregistrez, fermez et passez au fichier suivant :

 

Rendez vous dans le fichier : UserInterface/Locale_inc.h

 

1. Ajoutez :

/**************************************************
* date        : 2016.08.23
* name        : Check from python if safebox is open
* author      : VegaS
*/    
#define ENABLE_CHECK_IF_SAFEBOX_OPEN
/**************************************************

2. Enregistrez, fermez et compilez votre lanceur ! Passez au fichier suivant côté root :

 

Rendez vous dans le fichier : root/uiSafebox.py

 

1. Cherchez :

    def CommandCloseSafebox(self):
        if self.tooltipItem:
            self.tooltipItem.HideToolTip()

        self.dlgPickMoney.Close()
        self.dlgChangePassword.Close()
        self.Hide()

2. Et remplacez 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()

3. Enregistrez, fermez et repackez si vous êtes satisfait ! Sinon, passez au fichier suivant si vous voulez tester que tout fonctionne :

 

Rendez vous dans le fichier : root/game.py

 

 

1. 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 !")

 

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

 

 


 

Voilà pour le tutoriel ! Pour les curieux, voici une vidéo tournée ce soir même pour vous montrer un des usages possible de cette fonction !

 

 
Merci de votre lecture et bonne journée / soirée ! :D
 
Modifié par FrancH

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le partage !

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le partage !! +1

Partager ce message


Lien à poster
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:

Partager ce message


Lien à poster
Partager sur d’autres sites

Waw :0 

Gurgaaaaa <3

Partager ce message


Lien à poster
Partager sur d’autres 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 !

Partager ce message


Lien à poster
Partager sur d’autres sites

Hors sujet mais a partire de 20 second moi sa bug la vidéo x) Sinon cela peut etre utile :P 

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Gracias !

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres sites

Good job 

Partager ce message


Lien à poster
Partager sur d’autres sites

×

Information importante

By using this site, you agree to our Conditions d’utilisation.