コード例 #1
0
ファイル: pnj.py プロジェクト: 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)
コード例 #2
0
ファイル: pnj.py プロジェクト: 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)
コード例 #3
0
ファイル: pnj.py プロジェクト: stormi/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)
コード例 #4
0
ファイル: pnj.py プロジェクト: stormi/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)
コード例 #5
0
ファイル: pnj.py プロジェクト: 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)
コード例 #6
0
ファイル: pnj.py プロジェクト: 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)
コード例 #7
0
ファイル: pnj.py プロジェクト: stormi/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
コード例 #8
0
ファイル: pnj.py プロジェクト: 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
コード例 #9
0
ファイル: pnj.py プロジェクト: 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
コード例 #10
0
ファイル: pnj.py プロジェクト: stormi/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
コード例 #11
0
ファイル: pnj.py プロジェクト: 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)
コード例 #12
0
ファイル: pnj.py プロジェクト: 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
コード例 #13
0
ファイル: pnj.py プロジェクト: stormi/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)
コード例 #14
0
ファイル: joueur.py プロジェクト: wkta/tsunami
 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
コード例 #15
0
ファイル: joueur.py プロジェクト: stormi/tsunami
 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
コード例 #16
0
ファイル: joueur.py プロジェクト: wkta/tsunami
    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
コード例 #17
0
ファイル: joueur.py プロジェクト: wkta/tsunami
 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)
コード例 #18
0
ファイル: joueur.py プロジェクト: wkta/tsunami
 def mourir(self, adversaire=None, recompenser=True):
     Personnage.mourir(self, adversaire, recompenser)
     self.cpt_mort = 0
コード例 #19
0
ファイル: joueur.py プロジェクト: wkta/tsunami
    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
コード例 #20
0
ファイル: joueur.py プロジェクト: stormi/tsunami
 def mourir(self, adversaire=None, recompenser=True):
     Personnage.mourir(self, adversaire, recompenser)
     self.cpt_mort = 0
コード例 #21
0
ファイル: joueur.py プロジェクト: stormi/tsunami
    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
コード例 #22
0
ファイル: pnj.py プロジェクト: stormi/tsunami
 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
コード例 #23
0
ファイル: pnj.py プロジェクト: stormi/tsunami
 def tick(self):
     """Méthode appelée à chaque tick."""
     Personnage.tick(self)
     self.script["tick"].executer(pnj=self)
     importeur.hook["pnj:tick"].executer(self)