Esempio n. 1
0
File: pnj.py Progetto: wkta/tsunami
 def regarder(self, personnage):
     """personnage regarde self."""
     self.script["regarde"]["avant"].executer(personnage=personnage,
             pnj=self)
     Personnage.regarder(self, personnage)
     self.script["regarde"]["après"].executer(personnage=personnage,
             pnj=self)
Esempio n. 2
0
File: pnj.py Progetto: wkta/tsunami
    def mourir(self, adversaire=None, recompenser=True):
        """La mort d'un PNJ signifie sa destruction."""
        try:
            self.script["meurt"]["avant"].executer(pnj=self, salle=self.salle,
                    adversaire=adversaire)
        except InterrompreCommande:
            Personnage.mourir(self, adversaire=adversaire, recompenser=recompenser)
        else:
            Personnage.mourir(self, adversaire=adversaire, recompenser=recompenser)
            self.script["meurt"]["apres"].executer(pnj=self, salle=self.salle,
                    adversaire=adversaire)
            cadavre = importeur.objet.creer_objet(importeur.objet.prototypes[
                    "cadavre"])
            cadavre.pnj = self.prototype
            self.salle.objets_sol.ajouter(cadavre)

        importeur.hook["pnj:meurt"].executer(self, adversaire)

        # Gain d'XP
        if adversaire and self.gain_xp and recompenser:
            xp = importeur.perso.gen_niveaux.grille_xp[self.niveau][1]
            xp = xp * self.gain_xp / 100
            adversaire.gagner_xp("combat", xp)

        importeur.pnj.supprimer_PNJ(self.identifiant)
Esempio n. 3
0
 def regarder(self, personnage):
     """personnage regarde self."""
     self.script["regarde"]["avant"].executer(personnage=personnage,
             pnj=self)
     Personnage.regarder(self, personnage)
     self.script["regarde"]["après"].executer(personnage=personnage,
             pnj=self)
Esempio n. 4
0
    def detruire(self):
        """Destruction du PNJ."""
        self.decontroller()
        Personnage.detruire(self)
        if self in self.prototype.pnj:
            self.prototype.pnj.remove(self)

        if self.salle_origine:
            self.salle_origine.det_pnj(self)
Esempio n. 5
0
File: pnj.py Progetto: wkta/tsunami
    def detruire(self):
        """Destruction du PNJ."""
        self.decontroller()
        Personnage.detruire(self)
        if self in self.prototype.pnj:
            self.prototype.pnj.remove(self)

        if self.salle_origine:
            self.salle_origine.det_pnj(self)
Esempio n. 6
0
File: pnj.py Progetto: wkta/tsunami
    def tick(self):
        """Méthode appelée à chaque tick."""
        Personnage.tick(self)
        try:
            self.script["tick"].executer(pnj=self)
        except Exception:
            pass

        importeur.hook["pnj:tick"].executer(self)
Esempio n. 7
0
    def __init__(self, prototype, salle=None):
        """Constructeur du PNJ"""
        Personnage.__init__(self)
        self._nom = ""
        self.prototype = prototype
        self.salle = salle
        self.salle_origine = salle
        self.controle_par = None
        self.instance_connexion = None
        if salle:
            salle.pop_pnj(self)

        if prototype:
            prototype.no += 1
            self.identifiant = prototype.cle + "_" + str(
                    prototype.no)
            prototype.pnj.append(self)

            # On copie les attributs propres à l'objet
            # Ils sont disponibles dans le prototype, dans la variable
            # _attributs
            # C'est un dictionnaire contenant en clé le nom de l'attribut
            # et en valeur le constructeur de l'objet
            for nom, val in prototype._attributs.items():
                setattr(self, nom, val.construire(self))

            # On force l'écriture de la race
            self.race = prototype.race
            for stat in prototype.stats:
                t_stat = getattr(self.stats, "_{}".format(stat.nom))
                t_stat.defaut = stat.defaut
                t_stat.courante = stat.defaut
            self.stats.restaurer()
            self.lier_equipement(prototype.squelette)
            self.genre = prototype.genre
            self.talents.update(prototype.talents)
            self.sorts.update(prototype.sorts)

            # Copie de l'équipement
            for membre, p_objet in prototype.equipement.items():
                if self.equipement.squelette.a_membre(membre):
                    objet = importeur.objet.creer_objet(p_objet)
                    self.equipement.equiper_objet(membre, objet)

            # On force l'écriture du niveau
            self.niveau = prototype.niveau
Esempio n. 8
0
File: pnj.py Progetto: wkta/tsunami
    def __init__(self, prototype, salle=None):
        """Constructeur du PNJ"""
        Personnage.__init__(self)
        self._nom = ""
        self.prototype = prototype
        self.salle = salle
        self.salle_origine = salle
        self.controle_par = None
        self.instance_connexion = None
        if salle:
            salle.pop_pnj(self)

        if prototype:
            prototype.no += 1
            self.identifiant = prototype.cle + "_" + str(
                    prototype.no)
            prototype.pnj.append(self)

            # On copie les attributs propres à l'objet
            # Ils sont disponibles dans le prototype, dans la variable
            # _attributs
            # C'est un dictionnaire contenant en clé le nom de l'attribut
            # et en valeur le constructeur de l'objet
            for nom, val in prototype._attributs.items():
                setattr(self, nom, val.construire(self))

            # On force l'écriture de la race
            self.race = prototype.race
            for stat in prototype.stats:
                t_stat = getattr(self.stats, "_{}".format(stat.nom))
                t_stat.defaut = stat.defaut
                t_stat.courante = stat.defaut
            self.stats.restaurer()
            self.lier_equipement(prototype.squelette)
            self.genre = prototype.genre
            self.talents.update(prototype.talents)
            self.sorts.update(prototype.sorts)

            # Copie de l'équipement
            for membre, p_objet in prototype.equipement.items():
                if self.equipement.squelette.a_membre(membre):
                    objet = importeur.objet.creer_objet(p_objet)
                    self.equipement.equiper_objet(membre, objet)

            # On force l'écriture du niveau
            self.niveau = prototype.niveau
Esempio n. 9
0
File: pnj.py Progetto: wkta/tsunami
    def gagner_xp(self, niveau=None, xp=0, retour=True):
        """Fait gagner de l'XP au personnage."""
        ancien_niveau = self.niveau
        res = Personnage.gagner_xp(self, niveau, xp, retour)
        importeur.hook["pnj:gagner_xp"].executer(self, niveau, xp, retour)
        if self.niveau > ancien_niveau:
            importeur.hook["pnj:gagner_niveau"].executer(self, self.niveau)

        return res
Esempio n. 10
0
 def get_nom_etat(self, personnage, nombre=1):
     """Retourne le nom et l'état (singulier ou pluriel)."""
     if nombre == 1:
         nom = self.get_nom_pour(personnage) + " "
         if self.etats:
             nom += Personnage.get_etat(self)
         else:
             nom += self.etat_singulier
         return nom
     else:
         return str(nombre) + " " + self.nom_pluriel + " " + \
                 self.etat_pluriel
Esempio n. 11
0
File: pnj.py Progetto: wkta/tsunami
    def __getattr__(self, nom_attr):
        """Si le nom d'attribut n'est pas trouvé, le chercher
        dans le prototype

        """
        if nom_attr == "prototype":
            return object.__getattr__(self, nom_attr)
        else:
            try:
                return Personnage.__getattr__(self, nom_attr)
            except AttributeError:
                return getattr(self.prototype, nom_attr)
Esempio n. 12
0
File: pnj.py Progetto: wkta/tsunami
 def get_nom_etat(self, personnage, nombre=1):
     """Retourne le nom et l'état (singulier ou pluriel)."""
     if nombre == 1:
         nom = self.get_nom_pour(personnage) + " "
         if self.etats:
             nom += Personnage.get_etat(self)
         else:
             nom += self.etat_singulier
         return nom
     else:
         return str(nombre) + " " + self.nom_pluriel + " " + \
                 self.etat_pluriel
Esempio n. 13
0
    def __getattr__(self, nom_attr):
        """Si le nom d'attribut n'est pas trouvé, le chercher
        dans le prototype

        """
        if nom_attr == "prototype":
            return object.__getattr__(self, nom_attr)
        else:
            try:
                return Personnage.__getattr__(self, nom_attr)
            except AttributeError:
                return getattr(self.prototype, nom_attr)
Esempio n. 14
0
 def __init__(self):
     """Constructeur du joueur"""
     Personnage.__init__(self)
     self.nom_groupe = type(self).importeur.joueur.groupe_par_defaut
     self.compte = None
     self.instance_connexion = None
     self.connecte = False
     self.garder_connecte = False
     self.afk = ""
     self.retenus = {}
     self.distinction_visible = ""
     self.distinction_audible = ""
     self.no_tick = 1
     self.alias_francais = {}
     self.alias_anglais = {}
     self.tips = importeur.information.cfg_info.tips
     self.creation = datetime.now()
     self.derniere_connexion = None
     self.adresse_ip = "inconnue"
     self.cpt_mort = 0
     self.description = Description(parent=self, scriptable=False)
     self.description_a_valider = Description(parent=self, scriptable=False)
     self.description_modifiee = False
     self.pk = False
Esempio n. 15
0
 def __init__(self):
     """Constructeur du joueur"""
     Personnage.__init__(self)
     self.nom_groupe = type(self).importeur.joueur.groupe_par_defaut
     self.compte = None
     self.instance_connexion = None
     self.connecte = False
     self.garder_connecte = False
     self.afk = ""
     self.retenus = {}
     self.distinction_visible = ""
     self.distinction_audible = ""
     self.no_tick = 1
     self.alias_francais = {}
     self.alias_anglais = {}
     self.tips = importeur.information.cfg_info.tips
     self.creation = datetime.now()
     self.derniere_connexion = None
     self.adresse_ip = "inconnue"
     self.cpt_mort = 0
     self.description = Description(parent=self, scriptable=False)
     self.description_a_valider = Description(parent=self, scriptable=False)
     self.description_modifiee = False
     self.pk = False
Esempio n. 16
0
    def get_structure(self):
        """Retourne la structure simple du personnage."""
        d = self.creation
        creation = importeur.temps.variable
        creation.changer_IRL(d.year, d.month, d.day, d.hour, d.minute)
        d = self.derniere_connexion
        if d is not None:
            connexion = importeur.temps.variable
            connexion.changer_IRL(d.year, d.month, d.day, d.hour, d.minute)
        else:
            connexion = None

        structure = Personnage.get_structure(self)
        structure.nom = self.nom
        structure.creation = creation
        structure.derniere_connexion = connexion
        return structure
Esempio n. 17
0
 def appliquer_structure(self, structure):
     """Applique la structure passée en paramètre."""
     Personnage.appliquer_structure(self, structure)
     for cle, valeur in structure.donnees.items():
         if cle == "nom":
             importeur.joueur.renommer_joueur(self, valeur)
Esempio n. 18
0
 def mourir(self, adversaire=None, recompenser=True):
     Personnage.mourir(self, adversaire, recompenser)
     self.cpt_mort = 0
Esempio n. 19
0
    def tick(self):
        """Méthode appelée à chaque tick."""
        if self.instance_connexion:
            self.instance_connexion.envoyer_options("hello")

        if self.afk:
            return

        if self.est_mort():
            self.cpt_mort += 1
            if self.cpt_mort <= 12:
                return
            else:
                self.etats.vider()
                self.stats.vitalite = 1
                self.soif = 0
                self.faim = 0
                self.estomac = 0
                self.envoyer("Vous reprenez lentement conscience, vous " \
                        "sentant encore très faible.")
                self.cpt_mort = 0

        Personnage.tick(self)

        # Faim et soif
        if self.soif < 100:
            self.soif += 1 / 6
        if self.faim < 100:
            self.faim += 1 / 9
        if self.estomac > 0:
            self.estomac -= 0.1
        msg_soif = [
            (20, ("Vous avez soif.", 0)),
            (60, ("La soif vous assèche le gosier.", 0)),
            (80, ("Votre gorge asséchée vous fait souffrir le martyre.", 5)),
            (95, ("Votre vision se trouble sous l'effet de la déshydratation.",
                  20)),
        ]
        msg_faim = [
            (20, ("Vous avez faim.", 0)),
            (40, ("Votre estomac gargouille avec insistance.", 0)),
            (60, ("La faim vous noue douloureusement le ventre.", 0)),
            (80, ("Votre ventre proteste violemment.", 0)),
            (90, ("Vous souffrez horriblement de la faim.", 3)),
            (98, ("Des visions de banquets croulant sous la nourriture vous " \
                    "assaillent...", 20)),
        ]
        if not self.est_immortel():
            if self.soif >= 100:
                self << "Vous mourez de soif."
                self.mourir()
                return
            if self.faim >= 100:
                self << "Vous mourez de faim."
                self.mourir()
                return
            for seuil, msg in reversed(msg_soif):
                if self.soif >= seuil:
                    self.instance_connexion.sans_prompt()
                    self.instance_connexion.envoyer(msg[0], nl=1)
                    try:
                        self.vitalite -= msg[1]
                    except DepassementStat:
                        self << "Vous mourez de soif."
                        self.mourir()
                        return
                    break
            for seuil, msg in reversed(msg_faim):
                if self.faim >= seuil:
                    self.instance_connexion.sans_prompt()
                    self.instance_connexion.envoyer(msg[0], nl=1)
                    try:
                        self.vitalite -= msg[1]
                    except DepassementStat:
                        self << "Vous mourez de faim."
                        self.mourir()
                        return
                    break
Esempio n. 20
0
 def mourir(self, adversaire=None, recompenser=True):
     Personnage.mourir(self, adversaire, recompenser)
     self.cpt_mort = 0
Esempio n. 21
0
    def tick(self):
        """Méthode appelée à chaque tick."""
        if self.afk:
            return
        
        if self.est_mort():
            self.cpt_mort += 1
            if self.cpt_mort <= 12:
                return
            else:
                self.etats.vider()
                self.stats.vitalite = 1
                self.soif = 0
                self.faim = 0
                self.estomac = 0
                self.envoyer("Vous reprenez lentement conscience, vous " \
                        "sentant encore très faible.")
                self.cpt_mort = 0

        Personnage.tick(self)

        # Faim et soif
        if self.soif < 100:
            self.soif += 1/6
        if self.faim < 100:
            self.faim += 1/9
        if self.estomac > 0:
            self.estomac -= 0.1
        msg_soif = [
            (20, ("Vous avez soif.", 0)),
            (60, ("La soif vous assèche le gosier.", 0)),
            (80, ("Votre gorge asséchée vous fait souffrir le martyre.", 5)),
            (95, ("Votre vision se trouble sous l'effet de la déshydratation.",
                    20)),
        ]
        msg_faim = [
            (20, ("Vous avez faim.", 0)),
            (40, ("Votre estomac gargouille avec insistance.", 0)),
            (60, ("La faim vous noue douloureusement le ventre.", 0)),
            (80, ("Votre ventre proteste violemment.", 0)),
            (90, ("Vous souffrez horriblement de la faim.", 3)),
            (98, ("Des visions de banquets croulant sous la nourriture vous " \
                    "assaillent...", 20)),
        ]
        if not self.est_immortel():
            if self.soif >= 100:
                self << "Vous mourez de soif."
                self.mourir()
                return
            if self.faim >= 100:
                self << "Vous mourez de faim."
                self.mourir()
                return
            for seuil, msg in reversed(msg_soif):
                if self.soif >= seuil:
                    self.instance_connexion.sans_prompt()
                    self.instance_connexion.envoyer(msg[0], nl=1)
                    try:
                        self.vitalite -= msg[1]
                    except DepassementStat:
                        self << "Vous mourez de soif."
                        self.mourir()
                        return
                    break
            for seuil, msg in reversed(msg_faim):
                if self.faim >= seuil:
                    self.instance_connexion.sans_prompt()
                    self.instance_connexion.envoyer(msg[0], nl=1)
                    try:
                        self.vitalite -= msg[1]
                    except DepassementStat:
                        self << "Vous mourez de faim."
                        self.mourir()
                        return
                    break
Esempio n. 22
0
 def gagner_xp(self, niveau=None, xp=0, retour=True):
     """Fait gagner de l'XP au personnage."""
     res = Personnage.gagner_xp(self, niveau, xp, retour)
     importeur.hook["pnj:gagner_xp"].executer(self, niveau, xp, retour)
     return res
Esempio n. 23
0
 def tick(self):
     """Méthode appelée à chaque tick."""
     Personnage.tick(self)
     self.script["tick"].executer(pnj=self)
     importeur.hook["pnj:tick"].executer(self)