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)
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)
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
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))
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))
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)
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
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
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)
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))
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
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)
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)
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
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)
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))
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))
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()
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()
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))
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
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))
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))
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
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
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
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)))
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()
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)))
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()
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)))
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)))
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)))
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)))
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
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
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]]
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))
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))
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]
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))
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))
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))
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))
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]
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]]
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 []
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]]
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))
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
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
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
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
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))
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
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))