Exemple #1
0
    def xp_secondaire(personnage, niveau_secondaire, niveau_prevu,
                      pourcentage):
        """Donne l'XP absolue au personnage dans le niveau secondaire.

        Le nom du niveau secondaire doit être donné en son entier.
        Une partie de l'XP est automatiquement transmise au niveau principal.

        Note : l'XP relative est calculée pour le niveau secondaire
        mais pas pour le niveau principal. Le niveau principal actuel
        n'est pas pris en compte dans le calcul de l'XP relative.

        """
        niveaux = [n for n in importeur.perso.niveaux.values() if \
                supprimer_accents(n.nom).lower() == supprimer_accents(
                niveau_secondaire)]
        if not niveaux:
            raise ErreurExecution(
                "le niveau {} est introuvable".format(niveau_secondaire))

        niveau_prevu = int(niveau_prevu)
        if niveau_prevu < 1 or niveau_prevu > \
                importeur.perso.gen_niveaux.nb_niveaux:
            raise ErreurExecution("le niveau prévu doit être entre 1 et " \
                    "{}".format(importeur.perso.gen_niveaux.nb_niveaux))

        personnage.gagner_xp_rel(niveau_prevu, int(pourcentage),
                                 niveaux[0].cle)
Exemple #2
0
 def interpreter(self, msg):
     """Interprétation du message"""
     msg = supprimer_accents(msg).lower()
     if msg == "a":
         self.fermer()
         self.pere.envoyer("Opération annulée.")
     else:
         type_choisi = ""
         if self.choisi:
             p_types = types[self.choisi].types
         else:
             p_types = type(self).importeur.objet.types_premier_niveau
         
         for nom, p_type in p_types.items():
             if supprimer_accents(nom) == msg and p_type.selectable:
                 type_choisi = nom
                 break
         
         if not type_choisi:
             self.pere << "|err|Ce type est inconnu.|ff|"
         else:
             choix = types[type_choisi]
             # Si aucun type enfant n'existe
             if not choix.types:
                 self.objet = type(self).importeur.objet.creer_prototype(
                         self.identifiant, type_choisi)
                 enveloppe = EnveloppeObjet(EdtPresentation, self.objet, "")
             else:
                 enveloppe = EnveloppeObjet(EdtOedit, self.identifiant,
                         "", type_choisi)
             contexte = enveloppe.construire(self.personnage)
             
             self.migrer_contexte(contexte)
Exemple #3
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        salle = personnage.salle
        nom = self.a_interpreter
        t_nom = supprimer_accents(nom).lower()
        familiers = importeur.familier.familiers_de(personnage)
        familiers = [f for f in familiers if f.pnj]
        if self.salle_identique:
            familiers = [f for f in familiers if f.pnj.salle is salle]

        familier = None
        for t_familier in familiers:
            if supprimer_accents(t_familier.nom).lower() == t_nom:
                familier = t_familier
                break

        if not self.nouveau and familier is None:
            raise ErreurValidation(
                "|err|Le familier {} ne peut être trouvé.|ff|".format(nom))
        elif self.nouveau and familier:
            raise ErreurValidation(
                "|err|Le familier {} existe déjà.|ff|".format(nom))

        self.nom_familier = nom
        self.familier = familier
        return True
Exemple #4
0
    def talent(personnage, nom_talent):
        """Retourne le pourcentage du talent connu par le personnage.

        Si le personnage ne connaît pas le talent, retourne 0.

        Paramètres à entrer :

          * personnage : le personnage à tester
          * nom_talent : le nom du talent (chaîne)

        Exemple d'utilisation :

          niveau = talent(personnage, "maniement de l'épée")

        """
        nom_talent = supprimer_accents(nom_talent).lower()
        cle = None
        talent = None
        for t_talent in importeur.perso.talents.values():
            if supprimer_accents(t_talent.nom) == nom_talent:
                talent = t_talent
                cle = talent.cle
                break

        if talent is None:
            raise ErreurExecution("talent inconnu : {}".format(
                repr(nom_talent)))

        return Fraction(personnage.get_talent(cle))
Exemple #5
0
    def interpreter(self, msg):
        """Interprétation du contexte"""
        nom = msg
        msg_sa = supprimer_accents(msg).lower()
        liste = getattr(self.objet, self.attribut)
        cles = list(self.liste)
        cles_sa = [supprimer_accents(c).lower() for c in cles]
        if msg_sa in cles_sa:
            cle = cles[cles_sa.index(msg_sa)]
            if cle in liste:
                while cle in liste:
                    liste.remove(cle)
            else:
                liste.append(cle)

                # Ajout des évènements à l'objet taggé
                tag = importeur.tags.tags[cle]
                script = tag.script
                for evenement in script.evenements.values():
                    evt = self.tagge.script[evenement.nom]
                    evt.copier_depuis(evenement)
                    self.pere << "Copie de l'évènement {}.".format(
                            evenement.nom)

            liste[:] = [e for e in liste if e]
            self.actualiser()
        else:
            self.pere << "|err|La clé {} est introuvable.|ff|".format(
                    repr(msg))
Exemple #6
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre"""
        objets = list(dic_masques["nom_objet"].objets_qtt_conteneurs)
        objets = [c[0] for c in objets]
        message = dic_masques["message"].message
        orbe = objets[0]
        if not orbe.est_de_type("orbe"):
            personnage << "|err|{} n'est pas un orbe.|ff|".format(
                    pavillon.get_nom().capitalize())
            return

        nom = supprimer_accents(message).lower()
        if not supprimer_accents(nom).isalpha():
            personnage << "|err|Le nom {} est invalide.|ff|".format(nom)
            return

        orbes = importeur.objet.get_objets_de_type("orbe")
        noms = [o.nom_orbe for o in orbes]
        if nom in noms:
            personnage << "|err|Ce nom d'orbe est déjà utilisé.|ff|"
            return

        orbe.nom_orbe = nom
        personnage << "{} est à présent nommé {}.".format(orbe.nom_singulier,
                nom)
Exemple #7
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        salle = personnage.salle
        nom = self.a_interpreter
        t_nom = supprimer_accents(nom).lower()
        familiers = importeur.familier.familiers_de(personnage)
        familiers = [f for f in familiers if f.pnj]
        if self.salle_identique:
            familiers = [f for f in familiers if f.pnj.salle is salle]

        familier = None
        for t_familier in familiers:
            if supprimer_accents(t_familier.nom).lower() == t_nom:
                familier = t_familier
                break

        if not self.nouveau and familier is None:
            raise ErreurValidation(
                "|err|Le familier {} ne peut être trouvé.|ff|".format(nom))
        elif self.nouveau and familier:
            raise ErreurValidation(
                "|err|Le familier {} existe déjà.|ff|".format(nom))

        self.nom_familier = nom
        self.familier = familier
        return True
Exemple #8
0
    def traiter_commande(self, personnage, commande):
        """Traite les déplacements"""

        # Si la commande est vide, on ne se déplace pas
        if len(commande) == 0:
            return False

        commande = supprimer_accents(commande).lower()
        salle = personnage.salle
        try:
            sortie = salle.sorties.get_sortie_par_nom(commande,
                    cachees=False)
        except KeyError:
            pass
        else:
            personnage.deplacer_vers(sortie.nom)
            return True

        for nom, sortie in salle.sorties.iter_couple():
            if sortie and sortie.salle_dest:
                nom = supprimer_accents(sortie.nom).lower()
                if (sortie.cachee and nom == commande) or ( \
                        not sortie.cachee and nom.startswith(commande)):
                    personnage.deplacer_vers(sortie.nom)
                    return True

        if commande in NOMS_SORTIES.keys():
            personnage << "Vous ne pouvez aller par là..."
            return True

        return False
Exemple #9
0
 def __getitem__(self, nom):
     """Retourne le genre correspondant"""
     nom = supprimer_accents(nom).lower()
     for genre in self._genres.keys():
         if nom == supprimer_accents(genre).lower():
             return self._genres[genre]
     raise KeyError(nom)
Exemple #10
0
    def donner_bonus_perso(personnage, adresse, secondes, valeur):
        """Donne un bonus temporaire au personnage indiqué.

        Cette action permet de créer un bonus temporaire pour le personnage
        indiqué. La durée en secondes du bonus (un nombre) et la valeur
        du bonus (un autre nombre) doivent être précisés. L'expiration
        est géré automatiquement.

        Paramètres à préciser :

          * personnage : le personnage à modifier /
          * adresse : l'adresse de la modification (une chaîne) ;
          * secondes : le nombre de secondes du bonus (un nombre) ;
          * valeur : la valeur du bonus/malus (un nombre).

        Cette action permet de créer des bonus/malus temporaires pour
        plusieurs choses. Il faut donc préciser la nature de la modification.

        Une durée de 0 indique un bonus permanent, qui n'expirera jamais.

        Adresses supportées :

          "temperature" : la température du personnage
          "talent nom_du_talent" : un talent du personnage
          "stat nom_de_la_stat" : une statistique du personnage (il faut renseigner le nom entier de la statistique)

        Exemple d'utilisation :

          # Fait un bonus de 10° pour le personnage, durant 5 minutes
          donner_bonus personnage "temperature" 300 10

        """
        adresse = supprimer_accents(adresse).lower()
        if adresse == "temperature":
            secondes = int(secondes)
            valeur = round(float(valeur), 1)
            importeur.bonus.ajouter((personnage, "temperature"), valeur,
                    secondes)
        elif adresse.startswith("talent "):
            secondes = int(secondes)
            valeur = round(float(valeur), 1)
            debut, sep, adresse = adresse.partition(" ")
            cle = None
            talent = None
            for t_talent in importeur.perso.talents.values():
                if supprimer_accents(t_talent.nom) == adresse:
                    talent = t_talent
                    cle = talent.cle
                    break
            if talent is None:
                raise ErreurExecution("talent inconnu : {}".format(repr(adresse)))
            importeur.bonus.ajouter((personnage, "talent", cle), valeur, secondes)
        elif adresse.startswith("stat "):
            secondes = int(secondes)
            valeur = round(float(valeur), 1)
            debut, sep, adresse = adresse.partition(" ")
            importeur.bonus.ajouter((personnage, "stat", adresse), valeur, secondes)
        else:
            raise ErreurExecution("adresse '{}' introuvable.".format(
                    adresse))
Exemple #11
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre"""
        prompt = dic_masques["prompt"] or None
        if prompt:
            prompt = prompt.prompt
            if supprimer_accents(prompt).lower() in ("cache", "cacher"):
                personnage.prompts[self.prompt.nom] = ""
                personnage << "Votre {} a bien été masqué.".format(
                        self.prompt.aide_courte)
                return
            if supprimer_accents(prompt).lower() == "init":
                if self.prompt.nom in personnage.prompts:
                    del personnage.prompts[self.prompt.nom]

                personnage << "Votre {} a bien été réinitialisé.".format(
                        self.prompt.aide_courte)
                return

            prompt = prompt.replace("{", "{{")
            prompt = prompt.replace("}", "}}")
            for symbole, repl in sorted(tuple(self.prompt.symboles.items()),
                    key=lambda c: len(c[0]), reverse=True):
                prompt = prompt.replace("%{}".format(symbole), "{" + \
                        repl + "}")
            personnage.prompts[self.prompt.nom] = prompt
            personnage << "Votre {} a bien été modifié.".format(
                    self.prompt.aide_courte)

        prompt = personnage.prompts.get(self.prompt.nom,
                self.prompt.defaut)
        for symbole, repl in self.prompt.symboles.items():
            prompt = prompt.replace("{" + repl + "}", "%" + symbole)

        personnage << self.prompt.aide_courte.capitalize() + " actuel : " + \
                prompt
Exemple #12
0
    def interpreter(self, msg):
        """Interprétation du message"""
        msg = supprimer_accents(msg).lower()
        if msg == "a":
            self.fermer()
            self.pere.envoyer("Opération annulée.")
        else:
            type_choisi = ""
            if self.choisi:
                p_types = types[self.choisi].types
            else:
                p_types = type(self).importeur.objet.types_premier_niveau

            for nom, p_type in p_types.items():
                if supprimer_accents(nom) == msg and p_type.selectable:
                    type_choisi = nom
                    break

            if not type_choisi:
                self.pere << "|err|Ce type est inconnu.|ff|"
            else:
                choix = types[type_choisi]
                # Si aucun type enfant n'existe
                if not choix.types:
                    self.objet = type(self).importeur.objet.creer_prototype(
                        self.identifiant, type_choisi)
                    enveloppe = EnveloppeObjet(EdtPresentation, self.objet, "")
                else:
                    enveloppe = EnveloppeObjet(EdtOedit, self.identifiant, "",
                                               type_choisi)
                contexte = enveloppe.construire(self.personnage)

                self.migrer_contexte(contexte)
Exemple #13
0
    def xp_secondaire(personnage, niveau_secondaire, niveau_prevu,
            pourcentage):
        """Donne l'XP absolue au personnage dans le niveau secondaire.

        Le nom du niveau secondaire doit être donné en son entier.
        Une partie de l'XP est automatiquement transmise au niveau principal.

        Note : l'XP relative est calculée pour le niveau secondaire
        mais pas pour le niveau principal. Le niveau principal actuel
        n'est pas pris en compte dans le calcul de l'XP relative.

        """
        niveaux = [n for n in importeur.perso.niveaux.values() if \
                supprimer_accents(n.nom).lower() == supprimer_accents(
                niveau_secondaire)]
        if not niveaux:
            raise ErreurExecution("le niveau {} est introuvable".format(
                    niveau_secondaire))

        niveau_prevu = int(niveau_prevu)
        if niveau_prevu < 1 or niveau_prevu > \
                importeur.perso.gen_niveaux.nb_niveaux:
            raise ErreurExecution("le niveau prévu doit être entre 1 et " \
                    "{}".format(importeur.perso.gen_niveaux.nb_niveaux))

        personnage.gagner_xp_rel(niveau_prevu, int(pourcentage),
                niveaux[0].cle)
Exemple #14
0
    def traiter_commande(self, personnage, commande):
        """Traite les déplacements"""

        # Si la commande est vide, on ne se déplace pas
        if len(commande) == 0:
            return False

        commande = supprimer_accents(commande).lower()
        salle = personnage.salle
        try:
            sortie = salle.sorties.get_sortie_par_nom(commande, cachees=False)
        except KeyError:
            pass
        else:
            personnage.deplacer_vers(sortie.nom)
            return True

        for nom, sortie in salle.sorties.iter_couple():
            if sortie and sortie.salle_dest:
                nom = supprimer_accents(sortie.nom).lower()
                if (sortie.cachee and nom == commande) or ( \
                        not sortie.cachee and nom.startswith(commande)):
                    personnage.deplacer_vers(sortie.nom)
                    return True

        if commande in NOMS_SORTIES.keys():
            personnage << "Vous ne pouvez aller par là..."
            return True

        return False
Exemple #15
0
 def __getitem__(self, nom):
     """Retourne le genre correspondant"""
     nom = supprimer_accents(nom).lower()
     for genre in self._genres.keys():
         if nom == supprimer_accents(genre).lower():
             return self._genres[genre]
     raise KeyError(nom)
Exemple #16
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre"""
        salle = personnage.salle
        navire = salle.navire
        matelot = dic_masques["nom_matelot"].matelot
        nom_poste = dic_masques["message"].message
        equipage = navire.equipage

        if not navire.a_le_droit(personnage, "maître d'équipage"):
            personnage << "|err|Vous ne pouvez donner d'ordre sur ce " \
                    "navire.|ff|"
            return

        # On essaye de trouver le nom du poste (sans accents ni majuscules)
        nom = None
        for t_nom in ORDRE:
            if supprimer_accents(t_nom).lower() == supprimer_accents(
                    nom_poste).lower():
                nom = t_nom
                break

        if nom is None:
            personnage << "|err|Impossible de trouver le nom du poste : " \
                    "{}.|ff|".format(nom_poste)
        elif matelot.nom_poste == nom:
            personnage << "|err|Ce matelot est déjà à ce poste.|ff|"
        else:
            matelot.nom_poste = nom
            personnage << lisser("{} a bien été mis au poste de {}.".format(
                    matelot.nom, nom))
Exemple #17
0
    def talent(personnage, nom_talent):
        """Retourne le pourcentage du talent connu par le personnage.

        Si le personnage ne connaît pas le talent, retourne 0.

        Paramètres à entrer :

          * personnage : le personnage à tester
          * nom_talent : le nom du talent (chaîne)

        Exemple d'utilisation :

          niveau = talent(personnage, "maniement de l'épée")

        """
        nom_talent = supprimer_accents(nom_talent).lower()
        cle = None
        talent = None
        for t_talent in importeur.perso.talents.values():
            if supprimer_accents(t_talent.nom) == nom_talent:
                talent = t_talent
                cle = talent.cle
                break

        if talent is None:
            raise ErreurExecution("talent inconnu : {}".format(repr(
                    nom_talent)))

        return Fraction(personnage.get_talent(cle))
Exemple #18
0
    def interpreter(self, msg):
        """Interprétation du contexte"""
        nom = msg
        msg_sa = supprimer_accents(msg).lower()

        if self.liste and msg == "*":
            setattr(self.objet, self.attribut, ["*"])
        else:
            # Si la chaîne est déjà sélectionnée, on la supprime
            selectionnes = getattr(self.objet, self.attribut)
            selectionnes_sa = [supprimer_accents(s).lower() for s in \
                    selectionnes]
            if msg_sa in selectionnes_sa:
                selectionnes = [s for s in selectionnes if \
                        supprimer_accents(s).lower() != msg_sa]
            elif self.liste:
                liste_sa = [supprimer_accents(l) for l in self.liste]
                if msg_sa in liste_sa:
                    if "*" in selectionnes:
                        selectionnes.remove("*")
                    selectionnes.append(self.liste[liste_sa.index(msg_sa)])
                else:
                    self.pere << "Élément introuvable : {}".format(msg)
                    return
            else:
                selectionnes.append(msg)

            setattr(self.objet, self.attribut, selectionnes)

        self.actualiser()
Exemple #19
0
    def interpreter(self, msg):
        """Interprétation du contexte"""
        nom = msg
        msg_sa = supprimer_accents(msg).lower()

        if self.liste and msg == "*":
            setattr(self.objet, self.attribut, ["*"])
        else:
            # Si la chaîne est déjà sélectionnée, on la supprime
            selectionnes = getattr(self.objet, self.attribut)
            selectionnes_sa = [supprimer_accents(s).lower() for s in \
                    selectionnes]
            if msg_sa in selectionnes_sa:
                selectionnes = [s for s in selectionnes if \
                        supprimer_accents(s).lower() != msg_sa]
            elif self.liste:
                liste_sa = [supprimer_accents(l) for l in self.liste]
                if msg_sa in liste_sa:
                    if "*" in selectionnes:
                        selectionnes.remove("*")
                    selectionnes.append(self.liste[liste_sa.index(msg_sa)])
                else:
                    self.pere << "Élément introuvable : {}".format(msg)
                    return
            else:
                selectionnes.append(msg)

            setattr(self.objet, self.attribut, selectionnes)

        self.actualiser()
Exemple #20
0
    def get_niveau_par_nom(self, nom):
        """Retourne le niveau dont le nom est donné."""
        nom = supprimer_accents(nom).lower()
        for niveau in self.niveaux.values():
            if supprimer_accents(niveau.nom).lower() == nom:
                return niveau

        raise ValueError("niveau inconnu {}".format(nom))
Exemple #21
0
 def changer_distinction(self, nom, distinction):
     """Change la distinction par défaut du genre."""
     if nom not in [supprimer_accents(g.lower()) for g in self._genres.keys()]:
         raise KeyError(nom)
     for d in self._distinctions.keys():
         if nom == supprimer_accents(d.lower()):
             self._distinctions[d] = distinction
             break
Exemple #22
0
    def supprimer_element(self, nom):
        """Supprime l'élément du nom indiqué."""
        nom = supprimer_accents(nom).lower()
        for i, element in enumerate(self.elements):
            if supprimer_accents(element.nom).lower() == nom:
                del self.elements[i]
                return

        raise ValueError("l'élément {} ne peut être trouvé".format(nom))
Exemple #23
0
 def supprimer_element(self, nom):
     """Supprime l'élément du nom indiqué."""
     nom = supprimer_accents(nom).lower()
     for i, element in enumerate(self.elements):
         if supprimer_accents(element.nom).lower() == nom:
             del self.elements[i]
             return
     
     raise ValueError("l'élément {} ne peut être trouvé".format(nom))
Exemple #24
0
 def changer_distinction(self, nom, distinction):
     """Change la distinction par défaut du genre."""
     if nom not in [
             supprimer_accents(g.lower()) for g in self._genres.keys()
     ]:
         raise KeyError(nom)
     for d in self._distinctions.keys():
         if nom == supprimer_accents(d.lower()):
             self._distinctions[d] = distinction
             break
Exemple #25
0
    def tester(cls, objet, attribut, valeur):
        """Méthode testant la valeur.

        Cette méthode doit retourner True si la valeur correspond à la
        recherche, False sinon.

        """
        valeur = supprimer_accents(valeur).lower().replace("_b_", "|")
        attribut = supprimer_accents(attribut).lower()
        return valeur in attribut
Exemple #26
0
    def tester(cls, objet, attribut, valeur):
        """Méthode testant la valeur.

        Cette méthode doit retourner True si la valeur correspond à la
        recherche, False sinon.

        """
        valeur = supprimer_accents(valeur).lower().replace("_b_", "|")
        attribut = supprimer_accents(attribut).lower()
        return valeur in attribut
Exemple #27
0
    def changer_terrain(self, nouveau_terrain):
        """Change le terrain de la salle."""
        nouveau_terrain = supprimer_accents(nouveau_terrain).lower()
        for terrain in importeur.salle.terrains.keys():
            sa_terrain = supprimer_accents(terrain).lower()
            if sa_terrain == nouveau_terrain:
                self.nom_terrain = terrain
                return

        raise ValueError("terrain {} inconnu".format(repr(nouveau_terrain)))
Exemple #28
0
    def test_position(self, objet, valeur):
        """Permet une recherche sur le grand parent de l'objet
        (l'endroit où il se trouve, une salle ou un joueur.
        Pour préciser une salle, entrez son identifiant (zone:mnémo)
        et pour un joueur ou PNJ, entrez son nom ou son identifiant.

        """
        return objet.grand_parent and supprimer_accents(
            objet.grand_parent.nom_unique).lower() == supprimer_accents(
                valeur).lower()
Exemple #29
0
    def changer_terrain(self, nouveau_terrain):
        """Change le terrain de la salle."""
        nouveau_terrain = supprimer_accents(nouveau_terrain).lower()
        for terrain in importeur.salle.terrains.keys():
            sa_terrain = supprimer_accents(terrain).lower()
            if sa_terrain == nouveau_terrain:
                self.nom_terrain = terrain
                return

        raise ValueError("terrain {} inconnu".format(repr(nouveau_terrain)))
Exemple #30
0
    def test_position(self, objet, valeur):
        """Permet une recherche sur le grand parent de l'objet
        (l'endroit où il se trouve, une salle ou un joueur.
        Pour préciser une salle, entrez son identifiant (zone:mnémo)
        et pour un joueur ou PNJ, entrez son nom ou son identifiant.

        """
        return objet.grand_parent and supprimer_accents(
                objet.grand_parent.nom_unique).lower() == supprimer_accents(
                valeur).lower()
Exemple #31
0
    def get_extension(self, nom, exception=True):
        """Retourne l'extension précisée."""
        nom = supprimer_accents(nom).lower()

        for extension in self.extensions:
            if supprimer_accents(extension.nom).lower() == nom:
                return extension

        if exception:
            raise ValueError("L'extension {} n'existe pas".format(repr(nom)))
Exemple #32
0
    def get_extension(self, nom, exception=True):
        """Retourne l'extension précisée."""
        nom = supprimer_accents(nom).lower()

        for extension in self.extensions:
            if supprimer_accents(extension.nom).lower() == nom:
                return extension

        if exception:
            raise ValueError("L'extension {} n'existe pas".format(repr(nom)))
Exemple #33
0
    def get_commande(self, nom, exception=True):
        """Cherche la commande indiquée."""
        sa_nom = supprimer_accents(nom).lower()
        for commande in self.commandes:
            if supprimer_accents(commande.nom_complet).lower() == sa_nom:
                return commande

        if exception:
            raise ValueError("La commande {} est introuvable".format(
                    repr(nom)))
Exemple #34
0
    def get_commande(self, nom, exception=True):
        """Cherche la commande indiquée."""
        sa_nom = supprimer_accents(nom).lower().replace(":", " ")
        for commande in self.commandes:
            if supprimer_accents(
                    commande.nom_francais_complet).lower().startswith(sa_nom):
                return commande

        if exception:
            raise ValueError("La commande {} est introuvable".format(
                repr(nom)))
Exemple #35
0
    def repartir(self, personnage, masques, commande):
        """Répartition du masque.

        Si la commande est vide, on va la chercher dans le dernier masque
        réparti.

        """
        langue = personnage.langue_cmd
        anglais, francais = self.anglais, self.francais
        if langue == "anglais":
            mot_cle = anglais
        elif langue == "francais":
            mot_cle = supprimer_accents(francais)
        else:
            raise ValueError("langue {} inconnue".format(langue))

        if not commande:
            # Le paramètre peut se trouver dans le masque précédent
            masque = masques[-1]
            commande[:] = chaine_vers_liste(masque.a_interpreter)
            str_commande = liste_vers_chaine(commande)
            sa_commande = supprimer_accents(str_commande).lower()
            mot_cle = " " + mot_cle + " "
            if mot_cle in sa_commande:
                if self.gauche:
                    fin = sa_commande.index(mot_cle)
                else:
                    fin = sa_commande.rindex(mot_cle)

                masque.a_interpreter = str_commande[:fin]
                fin += len(mot_cle)
                commande[:] = commande[fin:]
                valide = True
            else:
                valide = False
        else:
            str_commande = liste_vers_chaine(commande)
            sa_commande = supprimer_accents(str_commande).lower()

            if sa_commande.startswith(mot_cle) or \
                    sa_commande.startswith(" " + mot_cle):
                plus = 0
                if sa_commande.startswith(" "):
                    plus = 1

                commande[:] = commande[len(mot_cle) + plus:]
                valide = True
            else:
                valide = False

        if valide:
            masques.append(self)

        return valide
Exemple #36
0
    def repartir(self, personnage, masques, commande):
        """Répartition du masque.

        Si la commande est vide, on va la chercher dans le dernier masque
        réparti.

        """
        langue = personnage.langue_cmd
        anglais, francais = self.anglais, self.francais
        if langue == "anglais":
            mot_cle = anglais
        elif langue == "francais":
            mot_cle = supprimer_accents(francais)
        else:
            raise ValueError("langue {} inconnue".format(langue))

        if not commande:
            # Le paramètre peut se trouver dans le masque précédent
            masque = masques[-1]
            commande[:] = chaine_vers_liste(masque.a_interpreter)
            str_commande = liste_vers_chaine(commande)
            sa_commande = supprimer_accents(str_commande).lower()
            mot_cle = " " + mot_cle + " "
            if mot_cle in sa_commande:
                if self.gauche:
                    fin = sa_commande.index(mot_cle)
                else:
                    fin = sa_commande.rindex(mot_cle)

                masque.a_interpreter = str_commande[:fin]
                fin += len(mot_cle)
                commande[:] = commande[fin:]
                valide = True
            else:
                valide = False
        else:
            str_commande = liste_vers_chaine(commande)
            sa_commande = supprimer_accents(str_commande).lower()

            if sa_commande.startswith(mot_cle) or \
                    sa_commande.startswith(" " + mot_cle):
                plus = 0
                if sa_commande.startswith(" "):
                    plus = 1

                commande[:] = commande[len(mot_cle) + plus:]
                valide = True
            else:
                valide = False

        if valide:
            masques.append(self)

        return valide
Exemple #37
0
    def get_membre(self, nom):
        """Retourne le membre si il le trouve grâce à son nom."""
        nom = supprimer_accents(nom).lower()
        noms = [(supprimer_accents(membre.nom).lower(), i) for i, membre in \
                enumerate(self.__membres)]
        noms = dict(noms)

        if nom not in noms.keys():
            raise KeyError("le membre {} n'existe pas dans ce " \
                    "squelette".format(nom))

        return self.__membres[noms[nom]]
Exemple #38
0
    def get_cycle(self, nom):
        """Retourne le cycle si existe.
        
        Si il n'existe pas, lève l'exception ValueError.
        
        """
        nom = supprimer_accents(nom).lower()
        for cycle in self.cycles:
            if supprimer_accents(cycle.nom) == nom:
                return cycle

        raise ValueError("cycle {} introuvable".format(nom))
Exemple #39
0
    def get_element(self, nom):
        """Retourne l'élément du nom indiqué.
        
        Si l'élément ne peut être trouvé, lève une exception ValueError.
        
        """
        nom = supprimer_accents(nom).lower()
        for element in self.elements:
            if supprimer_accents(element.nom).lower() == nom:
                return element

        raise ValueError("l'élément {} ne peut être trouvé".format(nom))
Exemple #40
0
 def __delitem__(self, nom):
     """Supprime le genre"""
     for genre in self._genres.keys():
         if nom == supprimer_accents(genre.lower()):
             nom = genre
             break
     del self._genres[nom]
     for d in self._distinctions.keys():
         if nom == supprimer_accents(d.lower()):
             nom = d
             break
     del self._distinctions[nom]
Exemple #41
0
    def get_periode(self, nom):
        """Retourne la période si existe.

        Si elle n'existe pas, lève l'exception ValueError.

        """
        nom = supprimer_accents(nom).lower()
        for periode in self.periodes:
            if supprimer_accents(periode.nom) == nom:
                return periode

        raise ValueError("période {} introuvable".format(nom))
Exemple #42
0
    def get_periode(self, nom):
        """Retourne la période si existe.

        Si elle n'existe pas, lève l'exception ValueError.

        """
        nom = supprimer_accents(nom).lower()
        for periode in self.periodes:
            if supprimer_accents(periode.nom) == nom:
                return periode

        raise ValueError("période {} introuvable".format(nom))
Exemple #43
0
 def get_element(self, nom):
     """Retourne l'élément du nom indiqué.
     
     Si l'élément ne peut être trouvé, lève une exception ValueError.
     
     """
     nom = supprimer_accents(nom).lower()
     for element in self.elements:
         if supprimer_accents(element.nom).lower() == nom:
             return element
     
     raise ValueError("l'élément {} ne peut être trouvé".format(nom))
Exemple #44
0
 def get_cycle(self, nom):
     """Retourne le cycle si existe.
     
     Si il n'existe pas, lève l'exception ValueError.
     
     """
     nom = supprimer_accents(nom).lower()
     for cycle in self.cycles:
         if supprimer_accents(cycle.nom) == nom:
             return cycle
     
     raise ValueError("cycle {} introuvable".format(nom))
Exemple #45
0
 def __delitem__(self, nom):
     """Supprime le genre"""
     for genre in self._genres.keys():
         if nom == supprimer_accents(genre.lower()):
             nom = genre
             break
     del self._genres[nom]
     for d in self._distinctions.keys():
         if nom == supprimer_accents(d.lower()):
             nom = d
             break
     del self._distinctions[nom]
Exemple #46
0
    def get_membre(self, nom):
        """Retourne le membre si il le trouve grâce à son nom."""
        nom = supprimer_accents(nom).lower()
        noms = [(supprimer_accents(membre.nom).lower(), i) for i, membre in \
                enumerate(self.__membres)]
        noms = dict(noms)

        if nom not in noms.keys():
            raise KeyError("le membre {} n'existe pas dans ce " \
                    "squelette".format(nom))

        return self.__membres[noms[nom]]
Exemple #47
0
    def recette(personnage, cle_guilde, ingredients, nom=""):
        """Cherche et fabrique la recette si trouvée.

        Si la recette n'est pas trouvée dans la guilde, retourne
        une liste vide. Sinon, retourne la liste des objets nouvellement
        créés.

        Paramètres à préciser :

          * personnage : le personnage voulant fabriquer la recette
          * cle_guilde : la clé de la guilde (une chaîne)
          * ingredients : la liste des ingrédients (liste d'objets)
          * nom (optionnel) : le nom de la recette

        Le dernier paramètre est utile si la guilde créé comporte
        potentiellement plusieurs recettes utilisant les mêmes
        ingrédients.

        Exemple d'utilisation :

          resultats = recette(personnage, "forgerons", ingredients)
          si resultats:
              # 'resultats' est une liste non vide d'objets
              pour chaque objet dans resultats:
                  poser salle objet

        """
        nom = supprimer_accents(nom).lower()
        cle_guilde = cle_guilde.lower()
        if cle_guilde not in importeur.crafting.guildes:
            raise ErreurExecution("La guilde {} n'existe pas".format(
                    repr(cle_guilde)))

        guilde = importeur.crafting.guildes[cle_guilde]

        if personnage not in guilde.membres:
            return []

        # On ne cherche que les rangs parents
        rangs_parents = guilde.membres[personnage].rang.rangs_parents

        for rang in guilde.rangs:
            if rang not in rangs_parents:
                continue

            for recette in rang.recettes:
                if nom == "" or nom == supprimer_accents(
                        recette.nom).lower():
                    if recette.peut_faire(personnage, ingredients):
                        return recette.creer_resultat(personnage, ingredients)

        return []
Exemple #48
0
    def supprimer_membre(self, nom):
        """Supprime le membre de nom nom"""
        nom = supprimer_accents(nom).lower()
        noms = [(supprimer_accents(membre.nom).lower(), i) for i, membre in \
                enumerate(self.__membres)]
        noms = dict(noms)

        try:
            membre = self.__membres[noms[nom]]
        except KeyError:
            raise KeyError("le membre {} est introuvable dans " \
                    "l'équipement de {}".format(nom, self.personnage))
        del self.__membres[noms[nom]]
Exemple #49
0
    def get_element(self, nom):
        """Retourne l'élément portant ce nom

        La recherche n'est pas sensible aux majuscules / minuscules
        ou aux accents.

        """
        nom = supprimer_accents(nom).lower()
        for elt in self.elements:
            if supprimer_accents(elt.nom) == nom:
                return elt

        raise ValueError("le nom d'élément {} est introuvable".format(nom))
Exemple #50
0
    def est_periode(self, nom):
        """Retourne True si la période est trouvée, False sinon.

        La recherche ne tient pas compte des accents ou majuscules /
        minuscules.

        """
        nom = supprimer_accents(nom).lower()
        for periode in self.periodes:
            if supprimer_accents(periode.nom) == nom:
                return True

        return False
Exemple #51
0
    def get_terrain(self, nom):
        """Retourne le terrain si trouvé.

        La recherche se fait indépendemment des accents, majuscules et
        minuscules. Si le terrain n'est pas trouvé, retourne None.

        """
        nom = supprimer_accents(nom).lower()
        for terrain in self.terrains.values():
            if supprimer_accents(terrain.nom).lower() == nom:
                return terrain

        return None
Exemple #52
0
    def get_chambre_avec_numero(self, numero):
        """Retourne la chambre avec le numéro spécifié.

        La recherche se fait sans tenir compte de la casse ni des
        accents. Si la chambre n'est pas trouvée, retourne None.

        """
        numero = supprimer_accents(numero.lower())
        for chambre in self.chambres.values():
            if supprimer_accents(chambre.numero.lower()) == numero:
                return chambre

        return None
Exemple #53
0
    def get_terrain(self, nom):
        """Retourne le terrain si trouvé.

        La recherche se fait indépendemment des accents, majuscules et
        minuscules. Si le terrain n'est pas trouvé, retourne None.

        """
        nom = supprimer_accents(nom).lower()
        for terrain in self.terrains.values():
            if supprimer_accents(terrain.nom).lower() == nom:
                return terrain

        return None
Exemple #54
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom = self.a_interpreter
     nom_sa = supprimer_accents(nom)
     for cmd in importeur.scripting.commandes_dynamiques.values():
         t_nom = str(cmd)
         if supprimer_accents(t_nom) == nom_sa:
             self.commande = cmd
             return True
     
     raise ErreurValidation(
         "|err|La commande dynamique '{}' n'existe pas.|ff|".format(nom))
Exemple #55
0
    def est_cycle(self, nom):
        """Retourne True si le cycle est trouvé, False sinon.
        
        La recherche ne tient pas compte des accents ou majuscules /
        minuscules.
        
        """
        nom = supprimer_accents(nom).lower()
        for cycle in self.cycles:
            if supprimer_accents(cycle.nom) == nom:
                return True

        return False
Exemple #56
0
    def get_type(self, nom_type):
        """Retourne, si trouvé, le type indiqué ou lève une KeyError.

        La recherche se fait indépendemment des majuscules, minuscules ou des
        accents.

        """
        nom_type = supprimer_accents(nom_type).lower()
        for type in self.types.values():
            if supprimer_accents(type.nom_type) == nom_type:
                return type

        raise KeyError("type {} introuvable".format(nom_type))