Example #1
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_cible = self.a_interpreter
     persos = personnage.salle.personnages
     objets = []
     cibles = []
     for o in personnage.salle.objets_sol:
         objets.append(o)
     for o in personnage.equipement.tenus:
         objets.append(o)
     
     for p in persos:
         if p is not personnage and contient(
                 p.get_nom_pour(personnage), nom_cible):
             cibles.append(p)
     for o in objets:
         if contient(o.nom_singulier, nom_cible):
             cibles.append(o)
     
     if not cibles:
         raise ErreurValidation("|err|Cette cible est introuvable.|ff|")
     
     self.cibles = cibles
     return True
Example #2
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom_cible = self.a_interpreter
        persos = personnage.salle.personnages
        objets = []
        cibles = []
        for o in personnage.salle.objets_sol:
            objets.append(o)
        for o in personnage.equipement.tenus:
            objets.append(o)

        for p in persos:
            if p is not personnage and contient(p.get_nom_pour(personnage),
                                                nom_cible):
                cibles.append(p)
        for o in objets:
            if contient(o.nom_singulier, nom_cible):
                cibles.append(o)

        if not cibles:
            raise ErreurValidation("|err|Cette cible est introuvable.|ff|")

        self.cibles = cibles
        return True
Example #3
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom = self.a_interpreter
        salle = personnage.salle
        cale = salle.navire.cale
        for objet, nombre in cale.conteneur.iter_nombres():
            if contient(objet.get_nom(nombre), nom):
                self.objets.append(objet)

        for conteneur in cale.conteneurs.values():
            for cle in conteneur.keys():
                try:
                    prototype = importeur.objet.prototypes[cle]
                except KeyError:
                    continue

                if contient(prototype.nom_singulier, nom) or contient(
                        prototype.nom_pluriel, nom):
                    self.prototype = prototype
                    return True

        if not self.objets:
            raise ErreurValidation("Cet objet n'est pas trouvable dans la " \
                    "cale de ce navire.")
Example #4
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre"""
        salle = personnage.salle
        if not importeur.commerce.questeur_existe(salle):
            personnage << "|err|Aucun questeur n'est présent là où " \
                    "vous vous trouvez.|ff|"
            return

        questeur = importeur.commerce.questeurs[salle]
        nombre = dic_masques["nombre"].nombre
        nom_type = dic_masques["type_piece"].nom_type
        prototype = None
        for t_prototype in questeur.monnaies:
            if contient(t_prototype.nom_singulier, nom_type):
                prototype = t_prototype
                break

        if prototype is None:
            personnage << "|err|Vous ne pouvez retirer cela.|ff|"
            return

        if questeur.servant is None:
            personnage << "|err|Personne n'est présent pour s'en charger.|ff|"
            return

        total = nombre * prototype.m_valeur
        if questeur.comptes.get(personnage, 0) < total:
            personnage << "|err|Vous ne possédez pas assez sur ce compte.|ff|"
            return

        personnage.envoyer("{{}} prend {} de ses coffres et vous les " \
                "donne.".format(prototype.get_nom(nombre)), questeur.servant)
        questeur.prelever(personnage, prototype, nombre)
Example #5
0
 def interpreter(self, msg):
     """Interprétation du message"""
     msg = msg.lower()
     if msg == "q":
         return self.opt_quitter("")
     
     if len(msg) < 3:
         self.pere << "|err|Ce nom de race est trop court.|ff|"
         return
     
     race = None
     races = sorted(type(self).importeur.perso.races, key=str)
     for t_race in races:
         if contient(t_race.nom, msg):
             race = t_race
             break
     
     if not race:
         race = type(self).importeur.perso.creer_race(msg)
     
     enveloppe = EnveloppeObjet(EdtPresentation, race, "")
     enveloppe.parent = self
     contexte = enveloppe.construire(self.personnage)
     
     self.migrer_contexte(contexte)
Example #6
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre."""
        salle = personnage.salle
        personnage.agir("manip_canot")
        texte = dic_masques["texte_libre"].texte

        if not getattr(salle, "navire", None):
            personnage << "|err|Vous n'êtes pas sur un navire.|ff|"
            return

        navire = salle.navire
        if not navire.etendue:
            personnage << "|err|Vous n'êtes pas sur un navire.|ff|"
            return

        if not salle.get_element("bossoir"):
            personnage << "|err|Il n'y a pas de bossoir ici.|ff|"
            return

        # Recherche du canot
        canot = None
        for t_canot in navire.canots:
            if contient(t_canot.nom, texte):
                canot = t_canot
                break

        if canot is None:
            personnage << "|err|Impossible de trouver ce canot.|ff|"
            return

        navire.descendre_canot(canot)
        personnage << "Vous mettez {} à l'eau.".format(canot.nom)
Example #7
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre"""
        salle = personnage.salle
        if not importeur.commerce.questeur_existe(salle):
            personnage << "|err|Aucun questeur n'est présent là où " \
                    "vous vous trouvez.|ff|"
            return

        questeur = importeur.commerce.questeurs[salle]
        nombre = dic_masques["nombre"].nombre
        nom_type = dic_masques["type_piece"].nom_type
        prototype = None
        for t_prototype in questeur.monnaies:
            if contient(t_prototype.nom_singulier, nom_type):
                prototype = t_prototype
                break

        if prototype is None:
            personnage << "|err|Vous ne pouvez retirer cela.|ff|"
            return

        if questeur.servant is None:
            personnage << "|err|Personne n'est présent pour s'en charger.|ff|"
            return

        total = nombre * prototype.m_valeur
        if questeur.comptes.get(personnage, 0) < total:
            personnage << "|err|Vous ne possédez pas assez sur ce compte.|ff|"
            return

        personnage.envoyer("{{}} prend {} de ses coffres et vous les " \
                "donne.".format(prototype.get_nom(nombre)), questeur.servant)
        questeur.prelever(personnage, prototype, nombre)
Example #8
0
    def interpreter(self, msg):
        """Interprétation du message"""
        msg = msg.lower()
        if msg == "q":
            return self.opt_quitter("")

        if len(msg) < 3:
            self.pere << "|err|Ce nom de race est trop court.|ff|"
            return

        race = None
        races = sorted(type(self).importeur.perso.races, key=str)
        for t_race in races:
            if contient(t_race.nom, msg):
                race = t_race
                break

        if not race:
            race = type(self).importeur.perso.creer_race(msg)

        enveloppe = EnveloppeObjet(EdtPresentation, race, "")
        enveloppe.parent = self
        contexte = enveloppe.construire(self.personnage)

        self.migrer_contexte(contexte)
Example #9
0
    def interpreter(self, msg):
        """Interprétation du message"""
        try:
            nom_stat, valeur = msg.split(" / ")
        except ValueError:
            self.pere << "|err|Syntaxe invalide.|ff|"
        else:
            # On cherche la stat
            stat = None
            for t_stat in self.objet:
                if not t_stat.max and contient(t_stat.nom, nom_stat):
                    stat = t_stat
                    break

            if not stat:
                self.pere << "|err|Cette stat est introuvable.|ff|"
            else:
                # Convertion
                try:
                    valeur = int(valeur)
                    assert valeur > 0
                    assert valeur >= stat.marge_min
                    assert valeur <= stat.marge_max
                except (ValueError, AssertionError):
                    self.pere << "|err|Valeur invalide.|ff|"
                else:
                    stat.defaut = valeur
                    self.actualiser()
Example #10
0
 def interpreter(self, msg):
     """Interprétation du message"""
     try:
         nom_stat, valeur = msg.split(" / ")
     except ValueError:
         self.pere << "|err|Syntaxe invalide.|ff|"
     else:
         # On cherche la stat
         stat = None
         for t_stat in self.objet:
             if not t_stat.max and contient(t_stat.nom, nom_stat):
                 stat = t_stat
                 break
         
         if not stat:
             self.pere << "|err|Cette stat est introuvable.|ff|"
         else:
             # Convertion
             try:
                 valeur = int(valeur)
                 assert valeur > 0
                 assert valeur >= stat.marge_min
                 assert valeur <= stat.marge_max
             except (ValueError, AssertionError):
                 self.pere << "|err|Valeur invalide.|ff|"
             else:
                 stat.defaut = valeur
                 self.actualiser()
Example #11
0
    def interpreter(self, personnage, dic_masques):
        """Interprétation du paramètre."""
        salle = personnage.salle
        personnage.agir("manip_canot")
        texte = dic_masques["texte_libre"].texte

        if not getattr(salle, "navire", None):
            personnage << "|err|Vous n'êtes pas sur un navire.|ff|"
            return

        navire = salle.navire
        if not navire.etendue:
            personnage << "|err|Vous n'êtes pas sur un navire.|ff|"
            return

        if not salle.get_element("bossoir"):
            personnage << "|err|Il n'y a pas de bossoir ici.|ff|"
            return

        # Recherche du canot
        canot = None
        for t_canot in navire.canots:
            if contient(t_canot.nom, texte):
                canot = t_canot
                break

        if canot is None:
            personnage << "|err|Impossible de trouver ce canot.|ff|"
            return

        navire.descendre_canot(canot)
        personnage << "Vous mettez {} à l'eau.".format(canot.nom)
Example #12
0
    def get_nombre_option(nom):
        """Retourne le nombre lié à un nom d'option, même abrégé."""
        for nombre, t_nom in NOMS_OPTIONS.items():
            if contient(t_nom, nom):
                return nombre

        raise ValueError("l'option {} est introuvable".format(repr(nom)))
Example #13
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom = self.a_interpreter

        salle = personnage.salle
        x, y, z = salle.coords.tuple()
        etendue = salle.etendue
        if not etendue:
            raise ErreurValidation(
                "Il n'y a pas de navires suffisamment proches.")

        navires = list(importeur.navigation.navires.values())
        navires = [n for n in navires if n.etendue is etendue and \
                contient(n.desc_survol, nom)]
        navires = [n for n in navires if mag(n.position.x, n.position.y,
                n.position.z, x, y, z) < 15]

        if not navires:
            raise ErreurValidation(
                "Ce navire est introuvable.")

        navire = navires[0]
        self.nom_navire = navire.nom
        self.navire = navire
        return True
Example #14
0
    def get_nombre_option(nom):
        """Retourne le nombre lié à un nom d'option, même abrégé."""
        for nombre, t_nom in NOMS_OPTIONS.items():
            if contient(t_nom, nom):
                return nombre

        raise ValueError("l'option {} est introuvable".format(repr(nom)))
Example #15
0
    def extraire_arguments(cls, navire, nom_navire):
        """Extrait les arguments de la volonté."""
        for navire in cls.trouver_navires(navire):
            if contient(navire.desc_survol, nom_navire):
                return (navire, )

        raise ValueError("Le navire {} n'est pas en vue.".format(nom_navire))
Example #16
0
    def extraire_arguments(cls, navire, nom_navire):
        """Extrait les arguments de la volonté."""
        for navire in Tirer.trouver_navires(navire):
            if contient(navire.desc_survol, nom_navire):
                return (navire, )

        raise ValueError("Le navire {} n'est pas en vue.".format(
                nom_navire))
Example #17
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_flag = self.a_interpreter
     for flag in self.liste_flags:
         if contient(flag, nom_flag):
             self.flag = flag
     return True
Example #18
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_flag = self.a_interpreter
     for flag in self.liste_flags:
         if contient(flag, nom_flag):
             self.flag = flag
     return True
Example #19
0
 def interpreter(self, personnage, dic_masques):
     """Méthode d'interprétation de commande"""
     nom_talent = dic_masques["message"].message
     for sort in importeur.magie.sorts.values():
         if contient(sort.nom, nom_talent) and sort.cle in personnage.sorts:
             del personnage.sorts[sort.cle]
             personnage << "Vous avez oublié le sort {}.".format(sort.nom)
             return
     for tal in importeur.perso.talents.values():
         if contient(tal.nom, nom_talent) and tal.cle in personnage.talents:
             oubli = personnage.talents[tal.cle]
             malus = int(oubli / 100 * 5) + 1 if oubli > 10 else 0
             personnage.malus += malus
             if personnage.malus > 60:
                 personnage.malus = 60
             personnage.points_malus += int(personnage.malus / 100 * oubli)
             del personnage.talents[tal.cle]
             personnage << "Vous avez oublié le talent {}.".format(tal.nom)
             return
     personnage << "|err|'{}' n'est ni un sort, ni un talent.|ff|".format(nom_talent)
Example #20
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom_sort = self.a_interpreter

        sorts = type(self).importeur.magie.sorts
        sorts_connus = [sorts.get(cle) for cle in personnage.sorts.keys() if \
                cle in sorts]
        for sort in sorts_connus:
            if contient(sort.nom, nom_sort):
                self.sort = sort
                return True

        for objet in personnage.equipement.inventaire:
            if objet.nom_type == "parchemin" and contient(objet.sort.nom,
                    nom_sort) and objet.charges > 0:
                self.sort = objet.sort
                self.parchemin = objet
                return True

        raise ErreurValidation(
            "|err|Vous ne connaissez pas ce sort ni ne possédez de " \
            "parchemin fonctionnel.|ff|")
Example #21
0
 def interpreter(self, msg):
     """Interprétation du message"""
     msg = msg.lower()
     prototype = self.objet
     race = None
     for t_race in type(self).importeur.perso.races:
         if contient(t_race.nom, msg):
             race = t_race
     
     if race is None:
         self.pere << "|err|Cette race n'existe pas.|ff|"
     else:
         prototype.race = race
         self.actualiser()
Example #22
0
    def interpreter(self, msg):
        """Interprétation du message"""
        operateur = "="

        if "+" in msg:
            operateur = "+"
            msg = msg.replace("+", "")
        elif "-" in msg:
            operateur = "-"
            msg = msg.replace("-", "")

        while "  " in msg:
            msg = msg.replace("  ", " ")

        try:
            nom_stat, valeur = msg.split(" ")
        except ValueError:
            self.pere << "|err|Syntaxe invalide.|ff|"
        else:
            # On cherche la stat
            stat = None
            for t_stat in self.objet:
                if not t_stat.max and contient(t_stat.nom, nom_stat):
                    stat = t_stat
                    break

            if not stat:
                self.pere << "|err|Cette stat est introuvable.|ff|"
            else:
                # Convertion
                try:
                    valeur = int(valeur)
                except ValueError:
                    self.pere << "|err|Valeur invalide.|ff|"
                else:
                    if operateur == "+":
                        valeur = stat.courante + valeur
                    elif operateur == "-":
                        valeur = stat.courante - valeur

                    try:
                        assert valeur > 0
                        assert valeur >= stat.marge_min
                        assert valeur <= stat.marge_max
                    except ValueError:
                        self.pere << "|err|Valeur invalide.|ff|"
                    else:
                        stat.defaut = valeur
                        stat.courante = valeur
                        self.actualiser()
Example #23
0
    def interpreter(self, msg):
        """Interprétation du message"""
        msg = msg.lower()
        prototype = self.objet
        race = None
        for t_race in type(self).importeur.perso.races:
            if contient(t_race.nom, msg):
                race = t_race

        if race is None:
            self.pere << "|err|Cette race n'existe pas.|ff|"
        else:
            prototype.race = race
            self.actualiser()
Example #24
0
 def interpreter(self, personnage, dic_masques):
     """Méthode d'interprétation de commande"""
     nom_talent = dic_masques["message"].message
     for tal in importeur.perso.talents.values():
         if contient(tal.nom, nom_talent) and tal.cle in personnage.talents:
             oubli = personnage.talents[tal.cle]
             malus = int(oubli / 100 * 5) + 1 if oubli > 10 else 0
             #personnage.malus += malus
             #if personnage.malus > 60:
             #personnage.malus = 60
             del personnage.talents[tal.cle]
             personnage << "Vous avez oublié le talent {}.".format(tal.nom)
             return
     personnage << "|err|Le talent '{}' est introuvable.|ff|".format(
         nom_talent)
Example #25
0
 def interpreter(self, personnage, dic_masques):
     """Méthode d'interprétation de commande"""
     nom_talent = dic_masques["message"].message
     for tal in importeur.perso.talents.values():
         if contient(tal.nom, nom_talent) and tal.cle in personnage.talents:
             oubli = personnage.talents[tal.cle]
             malus = int(oubli / 100 * 5) + 1 if oubli > 10 else 0
             #personnage.malus += malus
             #if personnage.malus > 60:
                 #personnage.malus = 60
             del personnage.talents[tal.cle]
             personnage << "Vous avez oublié le talent {}.".format(tal.nom)
             return
     personnage << "|err|Le talent '{}' est introuvable.|ff|".format(
             nom_talent)
Example #26
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_personnage = self.a_interpreter
     for p in personnage.salle.personnages:
         if p is not personnage and personnage.peut_voir(p) and \
                 contient(p.get_nom_pour(personnage), nom_personnage):
             self.personnage = p
             break
     
     if self.personnage is None:
         raise ErreurValidation(
             "|err|Ce personnage est introuvable.|ff|".format(nom_personnage))
     
     return True
Example #27
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_pnj = self.a_interpreter
     for p in personnage.salle.personnages:
         if p is not personnage and hasattr(p, "prototype") \
                 and contient(p.get_nom_pour(personnage), nom_pnj):
             self.pnj = p
             break
     
     if self.pnj is None:
         raise ErreurValidation(
             "|err|Ce PNJ est introuvable.|ff|")
     
     return True
Example #28
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_personnage = self.a_interpreter
     for p in personnage.salle.personnages:
         if p is not personnage and personnage.peut_voir(p) and \
                 contient(p.get_nom_pour(personnage), nom_personnage):
             self.personnage = p
             break
     
     if self.personnage is None:
         raise ErreurValidation(
             "|err|Ce personnage est introuvable.|ff|".format(nom_personnage))
     
     return True
Example #29
0
    def contient(chaine_complete, expression):
        """Retourne vrai si la chaine_complete contient expression.

        Le test ne tient ni compte des majuscules ni des accents.
        Une expression est contenue dans une chaîne si l'expression
        est le début d'un des mots de la chaîne complète.
        Par exemple :
            "chien" est contenue dans "un chien de ferme"
        Ou :
            "po" est contenue dans "une pomme rouge"
        Mais :
            "table" n'est pas contenue dans "une étable"
        Car "table" n'est pas le début d'un des mots de "une étable".

        """
        return contient(chaine_complete, expression)
Example #30
0
    def contient(chaine_complete, expression):
        """Retourne vrai si la chaine_complete contient expression.

        Le test ne tient ni compte des majuscules ni des accents.
        Une expression est contenue dans une chaîne si l'expression
        est le début d'un des mots de la chaîne complète.
        Par exemple :
            "chien" est contenue dans "un chien de ferme"
        Ou :
            "po" est contenue dans "une pomme rouge"
        Mais :
            "table" n'est pas contenue dans "une étable"
        Car "table" n'est pas le début d'un des mots de "une étable".

        """
        return contient(chaine_complete, expression)
Example #31
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_objet = self.a_interpreter
     magasin = personnage.salle.magasin
     service = None
     for i, (t_service, quantite) in enumerate(magasin.inventaire):
         if contient(t_service.nom_achat, nom_objet):
             service = t_service
             break
     if service is None:
         raise ErreurValidation( \
             "|err|L'objet demandé n'est pas en vente.|ff|")
     else:
         self.service = service
         self.no_ligne = i
         return True
Example #32
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom_objet = self.a_interpreter
     magasin = personnage.salle.magasin
     service = None
     for i, (t_service, quantite) in enumerate(magasin.inventaire):
         if contient(t_service.nom_achat, nom_objet):
             service = t_service
             break
     if service is None:
         raise ErreurValidation( \
             "|err|L'objet demandé n'est pas en vente.|ff|")
     else:
         self.service = service
         self.no_ligne = i
         return True
Example #33
0
    def repartir(self, personnage, masques, commande):
        """Répartition du masque."""
        nom_flag = liste_vers_chaine(commande)

        if not nom_flag:
            raise ErreurValidation("Précisez un flag de filtre.", False)

        nom_flag = nom_flag.split(" ")[0]

        if not contient("".join(self.liste_flags),
                        supprimer_accents(nom_flag.lower())):
            raise ErreurValidation("|err|Le flag précisé n'existe pas.|ff|",
                                   False)
        else:
            self.a_interpreter = nom_flag
            commande[:] = commande[len(nom_flag):]
            masques.append(self)
            return True
Example #34
0
 def interpreter(self, personnage, dic_masques):
     """Méthode d'interprétation de commande"""
     if dic_masques["message"] is not None:
         nom_talent = dic_masques["message"].message
         try:
             limite = dic_masques["nombre"].nombre
             limite = int(limite)
             assert 0 <= limite <= 100
         except (AttributeError, ValueError, AssertionError):
             personnage << "|err|Vous devez préciser un nombre positif " \
                     "inférieur ou égal à 100.|ff|"
         else:
             for talent in importeur.perso.talents.values():
                 if contient(talent.nom, nom_talent) \
                         and talent.cle in personnage.talents:
                     if limite < personnage.get_talent(talent.cle):
                         personnage << "|err|Votre connaissance de ce " \
                                 "talent est déjà supérieure à " \
                                 "{}%.|ff|".format(limite)
                         return
                     personnage.l_talents[talent.cle] = limite
                     if limite == 100:
                         del personnage.l_talents[talent.cle]
                         personnage << "Le talent {} est débloqué.".format(
                                 talent.nom)
                     else:
                         personnage << "Vous avez bloqué le talent " \
                                 "{} à {}%.".format(talent.nom, limite)
                     return
             personnage << "|err|Le talent '{}' est introuvable.|ff|".format(
                     nom_talent)
     else:
         if not personnage.l_talents:
             personnage << "|att|Vous n'avez aucun seuil défini.|ff|"
             return
         ret = "Vos talents bloqués :"
         lignes = []
         for cle, limite in personnage.l_talents.items():
             talent = importeur.perso.talents[cle]
             ligne = talent.nom[0].upper() + talent.nom[1:]
             ligne += " (" + str(limite) + "%)"
             lignes.append(ligne)
         ret += "\n- " + "\n- ".join(lignes)
         personnage << ret
Example #35
0
 def interpreter(self, personnage, dic_masques):
     """Méthode d'interprétation de commande"""
     if dic_masques["message"] is not None:
         nom_talent = dic_masques["message"].message
         try:
             limite = dic_masques["nombre"].nombre
             limite = int(limite)
             assert 0 <= limite <= 100
         except (AttributeError, ValueError, AssertionError):
             personnage << "|err|Vous devez préciser un nombre positif " \
                     "inférieur ou égal à 100.|ff|"
         else:
             for talent in importeur.perso.talents.values():
                 if contient(talent.nom, nom_talent) \
                         and talent.cle in personnage.talents:
                     if limite < personnage.get_talent(talent.cle):
                         personnage << "|err|Votre connaissance de ce " \
                                 "talent est déjà supérieure à " \
                                 "{}%.|ff|".format(limite)
                         return
                     personnage.l_talents[talent.cle] = limite
                     if limite == 100:
                         del personnage.l_talents[talent.cle]
                         personnage << "Le talent {} est débloqué.".format(
                             talent.nom)
                     else:
                         personnage << "Vous avez bloqué le talent " \
                                 "{} à {}%.".format(talent.nom, limite)
                     return
             personnage << "|err|Le talent '{}' est introuvable.|ff|".format(
                 nom_talent)
     else:
         if not personnage.l_talents:
             personnage << "|att|Vous n'avez aucun seuil défini.|ff|"
             return
         ret = "Vos talents bloqués :"
         lignes = []
         for cle, limite in personnage.l_talents.items():
             talent = importeur.perso.talents[cle]
             ligne = talent.nom[0].upper() + talent.nom[1:]
             ligne += " (" + str(limite) + "%)"
             lignes.append(ligne)
         ret += "\n- " + "\n- ".join(lignes)
         personnage << ret
Example #36
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        vit = self.a_interpreter
        trouve = False
        for cle in VIT_RAMES.keys():
            if contient(cle, vit):
                vit = cle
                trouve = True
                break

        if not trouve:
            vitesses = ", ".join(VIT_RAMES.keys())
            raise ErreurValidation(
                "|err|Vitesse invalide. Vitesse disponibles : {}.|ff|".format(
                    vitesses))

        self.vitesse = vit
        return True
Example #37
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     vit = self.a_interpreter
     trouve = False
     for cle in VIT_RAMES.keys():
         if contient(cle, vit):
             vit = cle
             trouve = True
             break
     
     if not trouve:
         vitesses = ", ".join(VIT_RAMES.keys())
         raise ErreurValidation(
             "|err|Vitesse invalide. Vitesse disponibles : {}.|ff|".format(
             vitesses))
     
     self.vitesse = vit
     return True
Example #38
0
 def repartir(self, personnage, masques, commande):
     """Répartition du masque."""
     nom_flag = liste_vers_chaine(commande)
     
     if not nom_flag:
         raise ErreurValidation(
             "Précisez un flag de filtre.", False)
     
     nom_flag = nom_flag.split(" ")[0]
     
     if not contient("".join(self.liste_flags),
             supprimer_accents(nom_flag.lower())):
         raise ErreurValidation(
             "|err|Le flag précisé n'existe pas.|ff|", False)
     else:
         self.a_interpreter = nom_flag
         commande[:] = commande[len(nom_flag):]
         masques.append(self)
         return True
Example #39
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom = self.a_interpreter
        nombre = self.nombre
        nb = 0

        salle = personnage.salle
        vegetal = None

        for plante in importeur.botanique.salles.get(salle, []):
            if contient(plante.nom, nom):
                nb += 1
                if nb == nombre:
                    vegetal = plante
                    break

        if vegetal is None:
            raise ErreurValidation("Vous ne voyez pas ce végétal ici.", True)

        self.vegetal = vegetal
        return True
Example #40
0
    def interpreter(self, msg):
        """Interprétation du message"""
        msg = msg.lower()
        if msg == "a":
            self.pere.joueur.contextes.retirer()
            self.pere.envoyer("Opération annulée.")
        else:
            type_choisi = ""
            p_types = type(self).importeur.navigation.types_elements
            for nom in p_types.keys():
                if contient(nom, msg):
                    type_choisi = nom

            if not type_choisi:
                self.pere << "|err|Ce type est inconnu.|ff|"
            else:
                choix = types[type_choisi]
                self.element = type(self).importeur.navigation.creer_element(
                    self.identifiant, choix)
                enveloppe = EnveloppeObjet(EdtPresentation, self.element, "")
                contexte = enveloppe.construire(self.personnage)

                self.migrer_contexte(contexte)
Example #41
0
 def interpreter(self, msg):
     """Interprétation du message"""
     msg = msg.lower()
     if msg == "a":
         self.pere.joueur.contextes.retirer()
         self.pere.envoyer("Opération annulée.")
     else:
         type_choisi = ""
         p_types = type(self).importeur.navigation.types_elements
         for nom in p_types.keys():
             if contient(nom, msg):
                 type_choisi = nom
         
         if not type_choisi:
             self.pere << "|err|Ce type est inconnu.|ff|"
         else:
             choix = types[type_choisi]
             self.element = type(self).importeur.navigation.creer_element(
                         self.identifiant, choix)
             enveloppe = EnveloppeObjet(EdtPresentation, self.element, "")
             contexte = enveloppe.construire(self.personnage)
             
             self.migrer_contexte(contexte)
Example #42
0
 def valider(self, personnage, dic_masques):
     """Validation du masque"""
     Masque.valider(self, personnage, dic_masques)
     nom = self.a_interpreter
     nombre = self.nombre
     nb = 0
     
     salle = personnage.salle
     vegetal = None
     
     for plante in importeur.botanique.salles.get(salle, []):
         if contient(plante.nom, nom):
             nb += 1
             if nb == nombre:
                 vegetal = plante
                 break
     
     if vegetal is None:
         raise ErreurValidation(
             "Vous ne voyez pas ce végétal ici.", True)
     
     self.vegetal = vegetal
     return True
Example #43
0
    def opt_egaliser(self, arguments):
        """Égalise les stats.

        Syntaxe :
            /e (<modificateurs de stat>)

        """
        # Restore les stats à leur valeur par défaut
        modele = importeur.perso.modele_stats
        for stat in self.objet:
            defaut = getattr(modele, "_{}".format(stat.nom)).defaut
            stat.defaut = defaut
            stat.courante = defaut

        dispo = importeur.perso.gen_niveaux.points_entrainement_disponibles(
            self.objet.parent.niveau)
        consommes = importeur.perso.gen_niveaux.points_entrainement_consommes(
            self.objet.parent)
        nb = dispo - consommes
        stats = list(importeur.perso.gen_niveaux.stats_entrainables.keys())
        if not arguments.strip():
            arguments = " ".join(stats)

        # Traitement des modificateurs
        modificateurs = arguments.split(" ")
        poids = {}
        for modificateur in modificateurs:
            nombre = 1
            try:
                modificateur, nombre = modificateur.split("=")
            except ValueError:
                pass

            # On recherche la stat
            stat = None
            for nom in stats:
                if contient(nom, modificateur):
                    stat = nom
                    break

            if stat is None:
                self.pere << "|err|Stat {} inconnue.|ff|".format(
                    repr(modificateur))
                return

            # Conversion du nombre
            try:
                nombre = int(nombre)
                assert nombre >= 0
            except (ValueError, AssertionError):
                self.pere << "Nombre {} invalide.|ff|".format(nombre)
                return

            # Modification du poids
            ancien = poids.get(stat)
            if nombre == 0:
                if ancien:
                    del poids[stat]
            else:
                ancien = ancien if ancien else 0
                nombre = ancien + nombre
                poids[stat] = nombre

        print("Poids de modification", poids)
        i = 0
        while i < nb:
            i += 1
            selections = []
            for nom in list(poids.keys()):
                stat = self.objet[nom]
                if stat.base >= stat.marge_max:
                    del poids[stat.nom]

            if not poids:
                self.pere << "|err|Impossible de répartir les stats.|ff|"
                return

            noms = list(poids.keys())
            probas = list(poids.values())
            stat = choix_probable_liste(noms, probas)
            stat = self.objet[stat]
            courante = stat.courante + 1
            stat.courante = courante
            stat.defaut = courante

            # On entraîne la stat liée
            liee = importeur.perso.cfg_stats.entrainement_liees.get(stat.nom)
            if liee:
                stat_liee = self.objet[liee]
                stat_liee.courante = stat_liee.courante + stat.courante
                stat_liee.defaut = stat_liee.courante + stat.courante

        self.actualiser()
Example #44
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom = self.a_interpreter
        nombre = self.nombre
        nb = 0

        salle = personnage.salle
        if not salle.voit_ici(personnage):
            raise ErreurValidation(
                "Il n'y a rien qui ressemble à cela par ici...", True)

        elt = None

        # On cherche dans les personnages
        for perso in salle.personnages:
            if personnage.peut_voir(perso) and \
                    contient(perso.get_nom_pour(personnage), nom):
                nb += 1
                if nb == nombre:
                    elt = perso
                    break

        if elt is None:
            for objet in personnage.equipement.inventaire:
                if contient(objet.get_nom(), nom):
                    nb += 1
                    if nb == nombre:
                        elt = objet
                        break

        if elt is None:
            # On cherche dans les décors
            for decor in salle.decors:
                nom_decor = decor.get_nom()
                if contient(nom_decor, nom):
                    nb += 1
                    if nb == nombre:
                        elt = decor

        if elt is None:
            # On cherche dans les objets
            for objet in salle.objets_sol:
                nom_objet = objet.get_nom()
                if contient(nom_objet, nom):
                    nb += 1
                    if nb == nombre:
                        elt = objet

        if not elt:
            # On cherche dans les autres éléments observables
            elts = salle.get_elements_observables(personnage)
            for t_elt in elts:
                nom_elt = t_elt.get_nom_pour(personnage)
                if contient(nom_elt, nom):
                    nb += 1
                    if nb == nombre:
                        elt = t_elt
                        break

        if not elt:
            nom = supprimer_accents(nom).lower()
            if salle.details.detail_existe(nom, flottants=True):
                detail = salle.details.get_detail(nom, flottants=True)
                nb += 1
                if nb == nombre:
                    elt = detail

        if elt is None:
            raise ErreurValidation(
                "Il n'y a rien qui ressemble à cela par ici...", True)

        self.element = elt
        return True
Example #45
0
    def valider(self, personnage, dic_masques):
        """Validation du masque"""
        Masque.valider(self, personnage, dic_masques)
        nom = self.a_interpreter
        nombre = self.nombre
        nb = 0

        salle = personnage.salle
        if not salle.voit_ici(personnage):
            raise ErreurValidation(
                "Il n'y a rien qui ressemble à cela par ici...", True)

        elt = None

        # On cherche dans les personnages
        for perso in salle.personnages:
            if personnage.peut_voir(perso) and \
                    contient(perso.get_nom_pour(personnage), nom):
                nb += 1
                if nb == nombre:
                    elt = perso
                    break

        if elt is None:
            for objet in personnage.equipement.inventaire:
                if contient(objet.get_nom(), nom):
                    nb += 1
                    if nb == nombre:
                        elt = objet
                        break

        if elt is None:
            # On cherche dans les décors
            for decor in salle.decors:
                nom_decor = decor.get_nom()
                if contient(nom_decor, nom):
                    nb += 1
                    if nb == nombre:
                        elt = decor

        if elt is None:
            # On cherche dans les objets
            for objet in salle.objets_sol:
                nom_objet = objet.get_nom()
                if contient(nom_objet, nom):
                    nb += 1
                    if nb == nombre:
                        elt = objet

        if not elt:
            # On cherche dans les autres éléments observables
            elts = salle.get_elements_observables(personnage)
            for t_elt in elts:
                nom_elt = t_elt.get_nom_pour(personnage)
                if contient(nom_elt, nom):
                    nb += 1
                    if nb == nombre:
                        elt = t_elt
                        break

        if not elt:
            nom = supprimer_accents(nom).lower()
            if salle.details.detail_existe(nom, flottants=True):
                detail = salle.details.get_detail(nom, flottants=True)
                nb += 1
                if nb == nombre:
                    elt = detail

        if elt is None:
            raise ErreurValidation(
                "Il n'y a rien qui ressemble à cela par ici...", True)

        self.element = elt
        return True