IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

[Python 3X] [AOE2 Parser] Impossible de déclencher la fonction trigger_ID


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2024
    Messages : 2
    Par défaut [Python 3X] [AOE2 Parser] Impossible de déclencher la fonction trigger_ID
    Bonjour

    Je travaille actuellement sur la librairie AOE2 Parser pour créer des déclencheurs sur le jeux Age of empire 2 édition définitive.

    Actuellement j'essaie de comprendre comment déplacer les déclencheurs dans la liste afin de les mettre en ordres notamment pour éviter des problèmes de performance Nom : Capture d'écran 2024-11-19 091526.png
Affichages : 87
Taille : 31,9 Ko (je précise que l'image ici est un exemple, j'ai en réalité 77 éléments à gérer. )

    Cependant, je bloque sur la fonction, je n'arrive pas à l'utiliser et mes recherches sur internet n'ont rien donner de concluant.

    Voici l'erreur que j'obtiens à chaque fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Traceback (most recent call last):
      File "C:\chemin_vers_le_script", line 424, in <module>
        self.move_triggers([57,58,59], 2)
        ^^^^
    NameError: name 'self' is not defined
    Voici le code en format réduit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    def move_triggers(self, trigger_ids: list[int], insert_index: int) -> None:
        """
        Moves the given IDs from anywhere to the split index. This function reorders triggers BUT keeps
        ``(de)activate trigger`` effects linked properly!
     
        As an example:
     
        ```
        [0,1,2,3,4,5,6,7,8]  # Current index order
        # Let's move trigger 1, 4, 5 and 6 to location 2
        self.move_triggers([1, 4, 5, 6], 2)  # << 2 is an INDEX, not the value
        [0,1,4,5,6,2,3,7,8]  # New index order
        ```
     
        Args:
            trigger_ids: The trigger IDs to move
            insert_index: The index that defines where to insert the triggers
        """
        if min(trigger_ids) < 0:
            raise ValueError(f"Trigger IDs cannot be negative")
     
        if insert_index >= len(self.trigger_display_order):
            # Add to the end of the list
            new_trigger_id_order = [n for n in self.trigger_display_order if n not in trigger_ids]
            new_trigger_id_order += trigger_ids
        else:
            insert_num = self.trigger_display_order[insert_index]
            new_trigger_id_order = [n for n in self.trigger_display_order if n not in trigger_ids or n == insert_num]
     
            split_index = new_trigger_id_order.index(insert_num)
     
            if insert_num in trigger_ids:
                new_trigger_id_order.remove(insert_num)
     
            new_trigger_id_order = new_trigger_id_order[:split_index] + trigger_ids + new_trigger_id_order[split_index:]
        self.reorder_triggers(new_trigger_id_order)
    '''
    Entre les deux, il y a tous le code pour créer les déclencheurs.
    '''
    #Appel de la fonction
    liste_longue = list(range(57,77))
    self.move_triggers([liste_longue], 1)
     
    scenario.write_to_file(output_path)
    Voici les liens et recherches que j'ai effectués:

    (La page du guide qui explique la fonciton pour déplacer les déclencheurs)
    https://ksneijders.github.io/AoE2Sce....move_triggers

    (J'ai regardé cette page afin de savoir comment je peux déclarer une fonction avec plusieurs paramètres)
    https://courspython.com/fonctions.html

    (J'ai visualiser les pages suivantes sur l'erreurs que j'obtiens mais rien de concluant)
    https://careerkarma.com/blog/python-...s-not-defined/
    https://host4geeks.com/blog/nameerro...and-solutions/ (Cette page est très énervante avec les pop ups)
    https://www.geeksforgeeks.org/nameer...ned-in-python/
    https://stackoverflow.com/questions/...is-not-defined

    C'est en regardant surtout le lien sur Stack overflow que je me demande si le créateur n'a pas oublié de définir la classe ou si je dois le faire quand j'appel de fonction.

    Du coup, ça m'a amené à regarder ceci :

    https://www.w3schools.com/python/python_classes.asp
    https://blog.hubspot.fr/website/classes-python

    Je coince sur le sujet est-ce quelqu'un peut m'aider en m'indiquant la voie à suivre ou un pointant un problème dans le code...

    Je vous remercie par avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Maselia Voir le message
    C'est en regardant surtout le lien sur Stack overflow que je me demande si le créateur n'a pas oublié de définir la classe ou si je dois le faire quand j'appel de fonction.
    La page du guide que vous mentionnez décrit les méthodes de la classe TriggerManager. Vous avez recopié le source de la méthode move_triggers au lieu de l'utiliser.

    Citation Envoyé par Maselia Voir le message
    Je coince sur le sujet est-ce quelqu'un peut m'aider en m'indiquant la voie à suivre ou un pointant un problème dans le code...
    Vous avez au moins 2 soucis.

    Le premier est un minimum de familiarité avec Python.

    Le message d'erreur "NameError" est celui que l'on rencontre lorsqu'on a omis de définir une variable (ici "self").
    Quand on voit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def move_triggers(self, ...):
         ...
    on devrait se poser quelques questions genre: tiens le def est en colonne 0, pourtant son premier argument est "self" comme si c'était une méthode...

    Sans avoir pris le temps d'acquérir un minimum de bases, pas étonnant que vous soyez perdu.

    Et ce n'est pas ce qu'on pourra vous raconter dans un forum qui remplacera le temps passé dans un tuto à essayer de comprendre les concepts présentés en faisant des exercices.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2024
    Messages : 2
    Par défaut
    Je suis désolé j'ai rien compris...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Maselia Voir le message
    Je suis désolé j'ai rien compris...
    Cela ne me surprends pas.
    Comment avez vous appris à programmer avec python?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Occupé
    Inscrit en
    Décembre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Occupé

    Informations forums :
    Inscription : Décembre 2021
    Messages : 31
    Par défaut
    @ Maselia

    Ce que tente de vous faire comprendre wiztricks, c'est qu'il faudrait revoir les bases de la programmation Python.

    self est un paramètre qui est listé en premier et qui est une référence d'instance (objet).
    Il est utilisé lors de la définition d'une méthode (autrement dit une "fonction" encapsulée dans une classe).

    Cela se rapporte à de la programmation orientée objet.

    Votre fonction, que vous devriez appeler méthode, ne peut se trouver en colonne 0 car elle devrait se trouver après la définition d'une classe
    donc à minima en colonne 1.

    Peut être devriez vous essayer les chapitres 11 et 12 au sujet des classes, objets, attributs du livre de Gérard Swinnen "Apprendre à programmer avec Python 3" qui l'explique très bien.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par MagicJohnson Voir le message
    Votre fonction, que vous devriez appeler méthode, ne peut se trouver en colonne 0 car elle devrait se trouver après la définition d'une classe
    Le problème est que ce n'est pas "sa" fonction mais un copie/coller de la documentation de la méthode illustré par le code source (avec la méthode en colonne 0).

    Pour le reste, difficile d'utiliser un outil sans savoir lire le mode d'emploi...

    note: si le PO donnait son intention, on pourrait lui suggérer des solutions mais sa demande se limite à l'utilisation d'une méthode et à l'incompréhension d'un message d'erreur (courant!).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 3.x] Parser du json
    Par YZYAA dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 18/08/2017, 15h47
  2. [XSL]Impossible d'utiliser les fonctions XPath 2.0
    Par cvmz dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/03/2006, 19h19
  3. Réponses: 29
    Dernier message: 09/02/2006, 17h11
  4. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo