def accueil(self): """Message d'accueil du contexte""" sortie = self.objet salle = sortie.parent msg = "| |tit|" msg += "Edition de la sortie {} de {}".format( sortie.direction, salle).ljust(76) msg += "|ff||\n" + self.opts.separateur + "\n" msg += self.aide_courte msg += "\n\nNom de la sortie : |ent|" + sortie.nom_complet + "|ff|" msg += "\nDirection : " + sortie.direction msg += " (vers |vr|" + str(sortie.salle_dest) + "|ff|)" msg += "\nRéciproque : |cy|" msg += sortie.correspondante or "aucune (sens unique)" msg += "|ff|\nSortie cachée : " + oui_ou_non(sortie.cachee) msg += "\nPorte : " + oui_ou_non(bool(sortie.porte)) if sortie.porte and sortie.porte.clef: msg += " (clef : |bc|" + sortie.porte.clef.nom_singulier + "|ff|)" if sortie.direction in ("bas, haut"): a_esc = sortie._diff_escalade > 0 msg += "\nÀ escalader : " + oui_ou_non(a_esc) if a_esc: msg += " ({:>2}/10)".format(sortie._diff_escalade) return msg
def accueil(self): """Message d'accueil du contexte""" salle = self.objet msg = "| |tit|" + "Edition du magasin de {}".format(salle).ljust(76) msg += "|ff||\n" + self.opts.separateur + "\n" msg += self.aide_courte if salle.magasin is not None: magasin = salle.magasin cle_vendeur = magasin.prototype_vendeur and \ magasin.prototype_vendeur.cle or "|rg|aucun|ff|" vendeur = magasin.vendeur and magasin.vendeur.nom_singulier or "aucun" msg += "\n\nNom du magasin : " + salle.magasin.nom msg += "\nVendeur {} ({})".format(cle_vendeur, vendeur) msg += "\nOuverture à {:02}:{:02} Fermeture à {:02}:" \ "{:02}".format(*(magasin.ouverture + magasin.fermeture)) msg += "\nRenouvellement tous les {} jour(s)".format( magasin.renouvellement_jours) msg += " (à l'ouverture {} à la fermeture {})".format( oui_ou_non(magasin.renouveler_ouverture), oui_ou_non( magasin.renouveler_fermeture)) msg += "\n\nTypes admis en vente : " + ", ".join( magasin.types_vente) msg += "\nVente unitaire maximum {} Vente totale maximum " \ "{}".format(magasin.aff_max_vente_unitaire, magasin.aff_max_vente_total) msg += "\n\n" + str(salle.magasin) return msg
def accueil(self): """Message d'accueil du contexte""" sortie = self.objet salle = sortie.parent msg = "| |tit|" msg += "Edition de la sortie {} de {}".format(sortie.direction, salle).ljust(76) msg += "|ff||\n" + self.opts.separateur + "\n" msg += self.aide_courte msg += "\n\nNom de la sortie : |ent|" + sortie.nom_complet + "|ff|" msg += "\nDirection : " + sortie.direction msg += " (vers |vr|" + str(sortie.salle_dest) + "|ff|)" msg += "\nRéciproque : |cy|" msg += sortie.correspondante or "aucune (sens unique)" msg += "|ff|\nSortie cachée : " + oui_ou_non(sortie.cachee) msg += "\nPorte : " + oui_ou_non(bool(sortie.porte)) if sortie.porte and sortie.porte.clef: msg += " (clef : |bc|" + sortie.porte.clef.nom_singulier + "|ff|)" if sortie.direction in ("bas, haut"): a_esc = sortie._diff_escalade > 0 msg += "\nÀ escalader : " + oui_ou_non(a_esc) if a_esc: msg += " ({:>2}/10)".format(sortie._diff_escalade) return msg
def erreur_validation(self, personnage, dic_masques): """Définit la réaction de la commande lors d'une erreur.""" salle = personnage.salle zone = salle.zone msg = "Informations actuelles sur la météo :" msg += "\n Température dynamique : " + oui_ou_non( importeur.meteo.temperature_dynamique) msg += "\n Nombre de perturbations en jeu : {}".format( len(importeur.meteo.perturbations_actuelles)) msg += "\n Température de l'univers : {}°".format( importeur.meteo.temperature) msg += "\n Température dans la zone {} : {}°".format( zone.cle, zone.temperature) msg += "\n Température de la salle {} : {}° (bonus={}°)".format( salle.ident, salle.temperature, importeur.bonus.get( salle, "temperature")) # Affichage des perturbations les plus proches if len(importeur.meteo.perturbations_actuelles) == 0: msg += " \nIl n'y a pas de perturbations en jeu." elif salle.coords.valide: proches = sorted([(p, p.distance_au_centre(salle)) for p in \ importeur.meteo.perturbations_actuelles], key=lambda c: c[1]) msg += "\n Perturbations proches :" for i, (perturbation, distance) in enumerate(proches): if i > 2: break msg += "\n {} distant de {} salles".format( perturbation.nom_pertu, round(distance)) else: msg += "\n La salle actuelle n'a pas de coordonnées valides." return msg
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" cle = dic_masques["cle"].cle if cle not in importeur.pnj.chemins: personnage << "|err|Ce chemin n'existe pas.|ff|" return chemin = importeur.pnj.chemins[cle] msg = "Détail sur le chemin {} :".format(chemin.cle) msg += "\n Flags :" for nom_flag in FLAGS.keys(): msg += "\n {}".format(nom_flag.capitalize()) msg += " : " + oui_ou_non(chemin.a_flag(nom_flag)) msg += "\n Salles du chemin :" if len(chemin.salles) == 0: msg += "\n Aucune" else: for salle, direction in chemin.salles.items(): msg += "\n " + salle.ident.ljust(20) + " " msg += direction.ljust(10) if salle in chemin.salles_retour and \ chemin.salles_retour[salle]: msg += " (retour " + chemin.salles_retour[salle] + ")" personnage << msg
def accueil(self): """Message d'accueil du contexte""" msg = "| |tit|Edition de {}|ff|".format(self.objet).ljust(87) + "|\n" msg += self.opts.separateur + "\n" # Parcourt des choix possibles for nom, objet in self.choix.items(): raccourci = self.get_raccourci_depuis_nom(nom) # On constitue le nom final # Si le nom d'origine est 'description' et le raccourci est 'd', # le nom final doit être '[D]escription' nom_maj = nom if objet.lecture_seule: nom_m = "[-] " + nom_maj.capitalize() else: pos = supprimer_accents(nom).lower().find(raccourci) if pos >= 0: raccourci = nom[pos:pos + len(raccourci)] raccourci = raccourci[0].upper() + raccourci[1:] nom_m = nom_maj[:pos] + "[|cmd|" + raccourci + "|ff|]" + \ nom_maj[pos + len(raccourci):] msg += "\n " + nom_m if issubclass(objet.editeur, Flag): apercu = oui_ou_non(getattr(objet.objet, objet.attribut)) else: apercu = objet.get_apercu() if apercu: msg += " : " + apercu return msg
def interpreter(self, personnage, dic_masques): """Interprétation de la commande.""" if dic_masques["cle"]: cle = dic_masques["cle"].cle if cle not in importeur.evt.evenements: personnage << "|err|Évènement {} inconnu.|ff|".format( repr(cle)) return evt = importeur.evt.evenements[cle] if personnage in evt.inscrits: evt.inscrits.remove(personnage) personnage << "Vous êtes désinscrit de l'évènement {}.".format( cle) else: evt.inscrits.append(personnage) personnage << "Vous êtes inscrit à l'évènement {}.".format( cle) return tableau = Tableau() tableau.ajouter_colonne("Clé") tableau.ajouter_colonne("Aide") tableau.ajouter_colonne("Inscrit") for evt in sorted(importeur.evt.evenements.values(), key=lambda e: e.cle): inscrit = oui_ou_non(personnage in evt.inscrits) tableau.ajouter_ligne(evt.cle, evt.aide, inscrit) personnage << tableau.afficher()
def accueil(self): """Message d'accueil du contexte""" msg = "| |tit|Edition de {}|ff|".format(self.objet).ljust(87) + "|\n" msg += self.opts.separateur + "\n" # Parcourt des choix possibles for nom, objet in self.choix.items(): raccourci = self.get_raccourci_depuis_nom(nom) # On constitue le nom final # Si le nom d'origine est 'description' et le raccourci est 'd', # le nom final doit être '[D]escription' pos = nom.find(raccourci) raccourci = ((pos == 0) and raccourci[0].upper() + raccourci[1:]) \ or raccourci nom_maj = nom[0].upper() + nom[1:] nom_m = nom_maj[:pos] + "[|cmd|" + raccourci + "|ff|]" + \ nom_maj[pos + len(raccourci):] msg += "\n " + nom_m enveloppe = self.choix[nom] if issubclass(enveloppe.editeur, Flag): apercu = oui_ou_non(getattr(enveloppe.objet, enveloppe.attribut)) elif issubclass(enveloppe.editeur, Flottant): apercu = aff_flottant(getattr(enveloppe.objet, enveloppe.attribut)) else: apercu = enveloppe.get_apercu() if apercu: msg += " : " + apercu return msg
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" langue = personnage.langue_cmd encodage = personnage.compte.encodage or "aucun" encodages = ["aucun"] + ENCODAGES res = "Options actuelles :\n\n" res += " Couleurs : {}\n".format(oui_ou_non( personnage.compte.couleur)) res += " Envoi des newsletters : {}\n".format(oui_ou_non( personnage.compte.newsletter)) res += " Votre encodage : |ent|" + encodage + "|ff|.\n" res += " Encodages disponibles : |ent|" + "|ff|, |ent|".join( encodages) + "|ff|.\n\n" res += " Votre langue : |ent|" + langue + "|ff|.\n" res += " Langues disponibles : |ent|français|ff|, " \ "|ent|anglais|ff|." personnage << res
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" langue = personnage.langue_cmd encodage = personnage.compte.encodage or "aucun" encodages = ["aucun"] + ENCODAGES res = "Options actuelles :\n\n" res += " Couleurs : {}\n".format(oui_ou_non( personnage.compte.couleur)) res += " Envoi d'e-mails de notification de MudMails : {}\n".format( oui_ou_non(personnage.compte.email)) res += " Envoi des newsletters : {}\n".format( oui_ou_non(personnage.compte.newsletter)) res += " Votre encodage : |ent|" + encodage + "|ff|.\n" res += " Encodages disponibles : |ent|" + "|ff|, |ent|".join( encodages) + "|ff|.\n\n" res += " Votre langue : |ent|" + langue + "|ff|.\n" res += " Langues disponibles : |ent|français|ff|, " \ "|ent|anglais|ff|." personnage << res
def afficher_options(self, personnage): """Retourne les options actives du personnage (list).""" nombre = self.get_options(personnage) options = [] for n, o in NOMS_OPTIONS.items(): msg = o.capitalize().ljust(15) + " : " msg += oui_ou_non(bool(n & nombre)) options.append(msg) options.sort() return options
def accueil(self): """Message d'accueil du contexte.""" msg = self.aide_courte.format(objet=self.objet) + "\n\n" msg += "Flags actuels :" flags = sorted(self.flags.items()) flag = getattr(self.objet, self.attribut) for nom, valeur in flags: msg += "\n " + nom.capitalize().ljust(20) actif = flag & valeur != 0 msg += " : " + oui_ou_non(actif) return msg
def accueil(self): """Message d'accueil du contexte""" canal = self.objet msg = "| |tit|" + "Edition des flags du canal {}".format( canal.nom).ljust(76) msg += "|ff||\n" + self.opts.separateur + "\n" msg += self.aide_courte msg += "Flags actuels :\n" for flag in FLAGS: msg += "\n |ent|" + flag + "|ff| : " msg += oui_ou_non(canal.flags & FLAGS[flag] != 0) return msg
def erreur_validation(self, personnage, dic_masques): """Définit la réaction de la commande lors d'une erreur.""" zone = personnage.salle.zone msg = "Informations actuelles sur la météo :" msg += "\n Température dynamique : " + oui_ou_non( importeur.meteo.temperature_dynamique) msg += "\n Nombre de perturbations en jeu : {}".format( len(importeur.meteo.perturbations_actuelles)) msg += "\n Température de l'univers : {}°".format( importeur.meteo.temperature) msg += "\n Température dans la zone {} : {}°".format( zone.cle, zone.temperature) return msg
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" zones = list(type(self).importeur.salle.zones.values()) zones = [z for z in zones if z.cle and z.salles] zones = sorted(zones, key=lambda z: z.cle) if zones: lignes = [" Clé | Salles | Ouverte |"] for zone in zones: ouverte = oui_ou_non(zone.ouverte) lignes.append(" {:<15} | {:>6} | {} |".format( zone.cle, len(zone.salles), ouverte)) personnage << "\n".join(lignes) else: personnage << "Aucune zone n'est actuellement défini."
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" zones = list(type(self).importeur.salle.zones.values()) zones = [z for z in zones if z.cle and z.salles] zones = sorted(zones, key=lambda z: z.cle) if zones: lignes = [ " Clé | Salles | Ouverte |"] for zone in zones: ouverte = oui_ou_non(zone.ouverte) lignes.append( " {:<15} | {:>6} | {} |".format( zone.cle, len(zone.salles), ouverte)) personnage << "\n".join(lignes) else: personnage << "Aucune zone n'est actuellement défini."
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" diligences = list(importeur.diligence.diligences.values()) diligences = sorted(diligences, key=lambda d: d.cle) if len(diligences) == 0: personnage << "|att|Aucune diligence maudite définie.|ff|" return tableau = Tableau() tableau.ajouter_colonne("Clé") tableau.ajouter_colonne("Ouverte") tableau.ajouter_colonne("Salles", DROITE) tableau.ajouter_colonne("Nombre en jeu", DROITE) for diligence in diligences: zones = [z for z in importeur.salle.zones.values() if \ z.cle.startswith(diligence.cle + "_")] nb = len(zones) tableau.ajouter_ligne(diligence.cle, oui_ou_non( diligence.ouverte), len(diligence.salles), nb) personnage << tableau.afficher()
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" diligences = list(importeur.diligence.diligences.values()) diligences = sorted(diligences, key=lambda d: d.cle) if len(diligences) == 0: personnage << "|att|Aucune diligence maudite définie.|ff|" return tableau = Tableau() tableau.ajouter_colonne("Clé") tableau.ajouter_colonne("Ouverte") tableau.ajouter_colonne("Salles", DROITE) tableau.ajouter_colonne("Nombre en jeu", DROITE) for diligence in diligences: zones = [z for z in importeur.salle.zones.values() if \ z.cle.startswith(diligence.cle + "_")] nb = len(zones) tableau.ajouter_ligne(diligence.cle, oui_ou_non(diligence.ouverte), len(diligence.salles), nb) personnage << tableau.afficher()
def oui_ou_non(valeur): """Retourne "oui" si la valeur est vraie, "non" sinon. 0 est toujours faux. 1 ou n'importe quel nombre est toujours vrai. Une valeur nulle est fausse. Une liste vide est fausse. Une information quelconque est toujours vraie (voir les exemples ci-dessous). Paramètres à préciser : * valeur : la valeur, sous la forme d'un nombre ou autre. Exemples d'utilisation : retour = oui_ou_non(1) # retour contient "oui" retour = oui_ou_non(0) # retour contient "non" retour = oui_ou_non(liste()) # retour contient "non" """ return oui_ou_non(bool(valeur))
def str_fourreau(self): """Retourne oui ou non.""" return oui_ou_non(self.fourreau)
def repos(self): return oui_ou_non(self.peut_asseoir or self.peut_allonger)
def aff_ordonnee(self): return oui_ou_non(self.ordonnee)
def interpreter(self, personnage, dic_masques): """Interprétation du paramètre""" navire = dic_masques["cle_navire"] salle = personnage.salle if navire is None: if not hasattr(salle, "navire") or salle.navire is None: personnage << "|err|Vous n'êtes pas sur un navire.|ff|" return navire = salle.navire else: navire = navire.navire modele = navire.modele etendue = navire.etendue etendue = etendue and etendue.cle or "aucune" direction = navire.direction.direction direction = round(direction, 3) direction = str(direction).replace(".", ",") nom_direction = navire.direction.nom_direction vitesse = navire.vitesse.norme vitesse = round(vitesse, 3) vitesse = str(vitesse).replace(".", ",") vitesse_n = navire.vitesse_noeuds vitesse_n = round(vitesse_n, 3) vitesse_n = str(vitesse_n).replace(".", ",") acceleration = navire.acceleration.norme acceleration = round(acceleration, 3) acceleration = str(acceleration).replace(".", ",") dir_acceleration = navire.acceleration.direction dir_acceleration = round(dir_acceleration, 3) dir_acceleration = str(dir_acceleration).replace(".", ",") gouvernail = navire.gouvernail cale = navire.cale voiles = navire.voiles hissees = [v for v in voiles if v.hissee] rames = navire.rames if gouvernail: orient = gouvernail.orientation if orient < 0: orient = -orient msg_gouv = "poussé de {}° sur bâbord".format(orient) elif orient > 0: msg_gouv = "poussé de {}° sur tribord".format(orient) else: msg_gouv = "parfaitement au centre" else: msg_gouv = "aucun" msg_rames = "" if rames: for rame in rames: msg_rames += ", " + rame.vitesse msg_rames = msg_rames.lstrip(", ") else: msg_rames = "Aucune" compteur = round(navire.compteur / 1000, 3) if compteur >= 2: compteur = "{} milles".format(str(compteur).replace(".", ",")) else: compteur = "{} mille".format(str(compteur).replace(".", ",")) msg = "Informations sur le navire {} :\n".format(navire.cle) msg += "\n Modèle : {} ({})".format(modele.cle, modele.nom) msg += "\n Nom : " + (navire.nom_personnalise if \ navire.nom_personnalise else "Aucun") msg += "\n Propriétaire : " + (navire.proprietaire and \ navire.proprietaire.nom or "Aucun") msg += "\n Étendue : " + etendue msg += " (profondeur={})".format(navire.profondeur) msg += "\n Immobilisé : {} En collision : {} Orientation : " \ "{}".format(oui_ou_non(navire.immobilise), oui_ou_non( navire.en_collision), navire.orientation) msg += "\n Cale : " + str(int(cale.poids)).rjust(6) msg += " / " + str(int(cale.poids_max)).rjust(6) + " (" msg += str(int(cale.poids / cale.poids_max * 100)).rjust(3) + "%)" msg += "\n Compteur : {}".format(compteur) msg += "\n Coordonnées : {}".format(navire.position.coordonnees) msg += "\n Point : {}".format(get_longitude_latitude( navire.position.x, navire.position.y)) msg += "\n Allure : {}".format(navire.nom_allure) msg += "\n Voiles : {} / {}".format(len(hissees), len(voiles)) msg += "\n Rames : " + msg_rames msg += "\n Gouvernail : " + msg_gouv msg += "\n Vitesse : {} ({} noeuds)".format(vitesse, vitesse_n) msg += "\n Accélération : {} ({}°)".format(acceleration, dir_acceleration) msg += "\n Direction : {} ({})".format(direction, nom_direction) personnage << msg
def support(self): """Retourne oui_ou_non.""" return oui_ou_non(self._peut_supporter > 0)