/[ambar]/ambar/personaje.py
ViewVC logotype

Diff of /ambar/personaje.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.14 by amoyav, Sat May 31 21:24:44 2003 UTC revision 2.15 by amoyav, Sat Jul 5 23:25:52 2003 UTC
# Line 27  from math import floor Line 27  from math import floor
27  from utils import *  from utils import *
28  from string import *  from string import *
29  from idioma import *  from idioma import *
30    from cronomine import *
31    
32  class Personaje(object):  class Personaje(object):
33      """Cualquier personaje, tanto jugador como no jugador.      """Cualquier personaje, tanto jugador como no jugador.
# Line 46  class Personaje(object): Line 47  class Personaje(object):
47    
48      # Versión del sistema de personajes (se incrementa al cambiar cualquiera      # Versión del sistema de personajes (se incrementa al cambiar cualquiera
49      # de Personaje, PersonajeJugador o PersonajeNoJugador)      # de Personaje, PersonajeJugador o PersonajeNoJugador)
50      VERSION = '1.5.2'      VERSION = '1.5.3'
51    
52      # Resultados de comparar otro personaje con este      # Resultados de comparar otro personaje con este
53      COMP_INF_MAS_FUERTE   = 9      COMP_INF_MAS_FUERTE   = 9
# Line 390  class Personaje(object): Line 391  class Personaje(object):
391                      if otro_personaje.__controlador != None:                      if otro_personaje.__controlador != None:
392                          otro_personaje.__controlador.sale_personaje(self, "el vacío")                          otro_personaje.__controlador.sale_personaje(self, "el vacío")
393              self.__sala = None              self.__sala = None
394            if isinstance(self, PersonajeJugador):
395                self._PersonajeJugador__crono_subir_hambre.parar()
396                self._PersonajeJugador__crono_subir_hambre = None
397                self._PersonajeJugador__crono_subir_sed.parar()
398                self._PersonajeJugador__crono_subir_sed = None
399                if self._PersonajeJugador__crono_msg_hambre != None:
400                    self._PersonajeJugador__crono_msg_hambre.parar()
401                    self._PersonajeJugador__crono_msg_hambre = None
402                if self._PersonajeJugador__crono_msg_sed != None:
403                    self._PersonajeJugador__crono_msg_sed.parar()
404                    self._PersonajeJugador__crono_msg_sed = None
405    
406    
407      def __getstate__(self):      def __getstate__(self):
408          """Método llamado para preguntar qué hay que salvar en un pickle."""          """Método llamado para preguntar qué hay que salvar en un pickle."""
409            from personajejugador import PersonajeJugador
410    
411          atributos = self.__dict__.copy()          atributos = self.__dict__.copy()
412    
# Line 410  class Personaje(object): Line 423  class Personaje(object):
423          atributos["_Personaje__idiomas"] = idiomas_nombres          atributos["_Personaje__idiomas"] = idiomas_nombres
424    
425          atributos["_Personaje__idioma_base"] = self.__idioma_base.nombre          atributos["_Personaje__idioma_base"] = self.__idioma_base.nombre
426            
427            if isinstance(self, PersonajeJugador):
428                # Lo mismo con la raza (solo PJ)
429                atributos["_PersonajeJugador__raza"] = self._PersonajeJugador__raza.nombre
430    
431          return atributos          return atributos
432    
433    
434      def __setstate__(self, atributos):      def __setstate__(self, atributos):
435          """Método llamado para restaurar los atributos provinientes de un pickle."""          """Método llamado para restaurar los atributos provinientes de un pickle."""
436            from personajejugador import PersonajeJugador
437          from personajenojugador import PersonajeNoJugador          from personajenojugador import PersonajeNoJugador
438          from interfazpnj import InterfazPNJ          from interfazpnj import InterfazPNJ
439            from raza import Raza_buscar
440            from mundo import Mundo
441    
442          self.__dict__ = atributos          self.__dict__ = atributos
443                            
# Line 427  class Personaje(object): Line 446  class Personaje(object):
446              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +
447                               " cuando se esperaba " + Personaje.VERSION)                               " cuando se esperaba " + Personaje.VERSION)
448    
449          assert(Personaje.VERSION == "1.5.2")          assert(Personaje.VERSION == "1.5.3")
450          while self.__version != "1.5.2":          while self.__version != "1.5.3":
451    
452              # La versión 1.5.1 produce una ruptura con las anteriores ya que se migra al formato              # La versión 1.5.1 produce una ruptura con las anteriores ya que se migra al formato
453              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas
# Line 439  class Personaje(object): Line 458  class Personaje(object):
458                  self.__max_vida = self.__vida                  self.__max_vida = self.__vida
459                  self.__version = "1.5.2"                  self.__version = "1.5.2"
460                  escribir("Convertido personaje " + self.__id + " a versión 1.5.2")                  escribir("Convertido personaje " + self.__id + " a versión 1.5.2")
461                elif self.__version == "1.5.2":
462              raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +                  # Versión 1.5.2 -> 1.5.3: añadir __hambre y __sed, la raza ahora
463                               self.__version + " cuando se esperaba " + Personaje.VERSION)                  # es solo el nombre y no la instancia entera.
464                    if isinstance(self, PersonajeJugador):
465                        self._PersonajeJugador__hambre = 0
466                        self._PersonajeJugador__sed = 0
467                        self._PersonajeJugador__crono_subir_hambre = FechaHoraMineRel(horas = self._PersonajeJugador__raza.tiempo_hambre)
468                        self._PersonajeJugador__crono_subir_sed = FechaHoraMineRel(horas = self._PersonajeJugador__raza.tiempo_sed)
469                        self._PersonajeJugador__crono_msg_hambre = None
470                        self._PersonajeJugador__crono_msg_sed = None
471                        self._PersonajeJugador__raza = self._PersonajeJugador__raza.nombre
472                    self.__version = "1.5.3"
473                    escribir("Convertido personaje " + self.__id + " a versión 1.5.3")
474                else:
475                    raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +
476                                     self.__version + " cuando se esperaba " + Personaje.VERSION)
477    
478          # Recuperar el controlador          # Recuperar el controlador
479          if isinstance(self, PersonajeNoJugador):          if isinstance(self, PersonajeNoJugador):
# Line 464  class Personaje(object): Line 496  class Personaje(object):
496    
497          idioma_base = Idioma_buscar(atributos["_Personaje__idioma_base"])          idioma_base = Idioma_buscar(atributos["_Personaje__idioma_base"])
498          self.__idioma_base = idioma_base          self.__idioma_base = idioma_base
499            
500            # Lo mismo con la raza (solo PJ)
501            if isinstance(self, PersonajeJugador):
502                self._PersonajeJugador__raza = Raza_buscar(self._PersonajeJugador__raza)
503    
504    
505      # Métodos normales      # métodos normales
506    
507      def cambiar_experiencia(self, puntos):      def cambiar_experiencia(self, puntos):
508          """Modifica el valor de la propiedad experiencia, sumando los puntos indicados.          """Modifica el valor de la propiedad experiencia, sumando los puntos indicados.
# Line 663  class Personaje(object): Line 699  class Personaje(object):
699              Mundo.personaje_desactivado(self)              Mundo.personaje_desactivado(self)
700              self.actuar_global("ha salido de Minë")              self.actuar_global("ha salido de Minë")
701    
702                # Los cronometros de hambre y sed se detienen, se guarda el tiempo
703                # que les queda para restaurarlos despues por donde iban.
704                self._PersonajeJugador__crono_subir_hambre.pausar()
705                self._PersonajeJugador__crono_subir_sed.pausar()
706                if self._PersonajeJugador__crono_msg_hambre != None:
707                    self._PersonajeJugador__crono_msg_hambre.pausar()
708                if self._PersonajeJugador__crono_msg_sed != None:
709                    self._PersonajeJugador__crono_msg_sed.pausar()
710    
711          # Si hay algún error en actuar_global, no hace falta restaurar nada, el          # Si hay algún error en actuar_global, no hace falta restaurar nada, el
712          # personaje queda en el limbo.          # personaje queda en el limbo.
713    
# Line 704  class Personaje(object): Line 749  class Personaje(object):
749                      Mundo.personaje_activado(self)                      Mundo.personaje_activado(self)
750                      self.actuar_global("ha entrado en Minë")                      self.actuar_global("ha entrado en Minë")
751    
752                        # Restaurar los cronometros de hambre y sed
753                        self._PersonajeJugador__crono_subir_hambre.reanudar()
754                        self._PersonajeJugador__crono_subir_sed.reanudar()
755                        if self._PersonajeJugador__crono_msg_hambre != None:
756                            self._PersonajeJugador__crono_msg_hambre.reanudar()
757                        if self._PersonajeJugador__crono_msg_sed != None:
758                            self._PersonajeJugador__crono_msg_sed.reanudar()
759    
760              except:              except:
761                  # Si casca algo, volvemos al limbo                  # Si casca algo, volvemos al limbo
762                  self.__id_sala_original = id_sala_original                  self.__id_sala_original = id_sala_original
# Line 711  class Personaje(object): Line 764  class Personaje(object):
764                  self.__controlador = None                              # capacidad de volumen infinita                  self.__controlador = None                              # capacidad de volumen infinita
765                  if isinstance(self, PersonajeJugador):                  if isinstance(self, PersonajeJugador):
766                      Mundo.personaje_desactivado(self)                      Mundo.personaje_desactivado(self)
767                    raise
768          else:          else:
769              self.__controlador = controlador              self.__controlador = controlador
770                                            
# Line 1010  class Personaje(object): Line 1064  class Personaje(object):
1064          """          """
1065          self.__vida -= dano          self.__vida -= dano
1066          if self.__vida <= 0:          if self.__vida <= 0:
1067              self.__estado = "muerto"              #self.__estado = "muerto"
1068                self.resucitar()
1069    
1070    
1071        def resucitar(self):
1072            """Esto es totalmente provisional, hasta que implementemos el sistema de muerte de verdad."""
1073            self.actuar_uno_mismo("Estas bastante MUERTO")
1074            self.actuar_uno_mismo("Pero como todavía no está hecho el código de morirse, pues vamos " + \
1075                                  "y te resucitamos por todo el morro")
1076            self.actuar_uno_mismo("Hale, a seguir tirando")
1077            self.actuar("tiembla un poco, gimotea, y cae al suelo, MUERTO.")
1078            self.actuar("de pronto, se levanta, se sacude el polvo, dice 'vaya, que chungo', y " + \
1079                        "se encuentra de nuevo tan campante. ¿Pero esto qué es?")
1080            self.__vida = self.__atrib["constitucion"] * 2
1081            if getattr(self, "alimentar", None) != None:
1082                self.alimentar(10000)
1083    
1084    
1085      def ataque_fisico(self, oponente):      def ataque_fisico(self, oponente):

Legend:
Removed from v.2.14  
changed lines
  Added in v.2.15

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26