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

Diff of /ambar/personaje.py

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

revision 2.22 by amoyav, Mon Sep 22 19:49:42 2003 UTC revision 2.23 by amoyav, Tue Sep 23 09:24:09 2003 UTC
# Line 47  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.6'      VERSION = '1.5.7'
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 474  class Personaje(object): Line 474  class Personaje(object):
474              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +
475                               " cuando se esperaba " + Personaje.VERSION)                               " cuando se esperaba " + Personaje.VERSION)
476    
477          assert(Personaje.VERSION == "1.5.6")          assert(Personaje.VERSION == "1.5.7")
478          while self.__version != "1.5.6":          while self.__version != "1.5.7":
479    
480              # 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
481              # 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 488  class Personaje(object): Line 488  class Personaje(object):
488                  escribir("Convertido personaje " + self.__id + " a versión 1.5.2")                  escribir("Convertido personaje " + self.__id + " a versión 1.5.2")
489              elif self.__version == "1.5.2":              elif self.__version == "1.5.2":
490                  # Versión 1.5.2 -> 1.5.3: añadir __hambre y __sed, la raza ahora                  # Versión 1.5.2 -> 1.5.3: añadir __hambre y __sed, la raza ahora
491                  # es solo el nombre y no la instancia entera.                  # es solo el nombre y no la instancia entera (sólo PJs).
492                  if isinstance(self, PersonajeJugador):                  if isinstance(self, PersonajeJugador):
493                      self._PersonajeJugador__hambre = 0                      self._PersonajeJugador__hambre = 0
494                      self._PersonajeJugador__sed = 0                      self._PersonajeJugador__sed = 0
# Line 517  class Personaje(object): Line 517  class Personaje(object):
517                  self.__tasaciones = {}                  self.__tasaciones = {}
518                  self.__version = "1.5.6"                  self.__version = "1.5.6"
519                  escribir("Convertido personaje " + self.__id + " a versión 1.5.6")                  escribir("Convertido personaje " + self.__id + " a versión 1.5.6")
520                elif self.__version == "1.5.6":
521                    # Versión 1.5.6 -> 1.5.7: añadir contadores y etiquetas (sólo PNJs)
522                    if isinstance(self, PersonajeNoJugador):
523                        self.__contadores = {}
524                        self.__etiquetas = {}
525                    self.__version = "1.5.7"
526                    escribir("Convertido personaje " + self.__id + " a versión 1.5.7")
527              else:              else:
528                  raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +                  raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +
529                                   self.__version + " cuando se esperaba " + Personaje.VERSION)                                   self.__version + " cuando se esperaba " + Personaje.VERSION)
# Line 584  class Personaje(object): Line 591  class Personaje(object):
591              self.__vida = self.__max_vida              self.__vida = self.__max_vida
592    
593    
594      def atributo(self, atributo):      def atributo(self, nombre_atributo):
595          """Devuelve el valor del atributo con el nombre indicado.          """Devuelve el valor del atributo con el nombre indicado.
596    
597          Es útil para requisitos.          Es útil para requisitos.
598    
599          Requiere:          Requiere:
600              atributo in self.__atrib.keys()              nombre_atributo in self.__atrib.keys()
601          """          """
602          return self.__atrib[atributo]          return self.__atrib[nombre_atributo]
603    
604    
605    
606      def cambiar_atributo(self, atributo, niveles):      def cambiar_atributo(self, nombre_atributo, niveles):
607          """Modifica el valor del atributo con el nombre indicado.          """Modifica el valor del atributo con el nombre indicado.
608    
609          El valor del parámetro niveles es sumado al del valor del atributo. Puede ser negativo.          El valor del parámetro niveles es sumado al del valor del atributo. Puede ser negativo.
610          Si el resultado es menor que 0 o mayor que el máximo, se trunca. <-%% ojo, sin hacer          Si el resultado es menor que 0 o mayor que el máximo, se trunca. <-%% ojo, sin hacer
611    
612          Requiere:          Requiere:
613              atributo in self.__atrib.keys()              nombre_atributo in self.__atrib.keys()
614          """          """
615          self.__atrib[atributo] += niveles          self.__atrib[nombre_atributo] += niveles
616          #%% OJO, comprobar los máximos...          #%% OJO, comprobar los máximos...
617    
618    
# Line 692  class Personaje(object): Line 699  class Personaje(object):
699          Asegura:          Asegura:
700              self.sala == sala_destino              self.sala == sala_destino
701          """          """
702          try:          from mundo import Mundo
703            if self.__sala.id != Mundo.ID_SALA_LIMBO and \
704               sala_destino.id != Mundo.ID_SALA_LIMBO:
705                objeto_ajeno = self.buscar_objeto_ajeno()
706                if objeto_ajeno != None:
707                    mensaje = "No puedes salir llevando " + objeto_ajeno.nombre + \
708                              ". No es de tu propiedad."
709                    if self.__anterior != None:
710                        mensaje += "\nYa no sigues a " + self.__anterior.id + "."
711                        self.no_seguir()
712                    raise ExcepcionDeJuego(mensaje)
713    
714              from mundo import Mundo          try:
             if self.__sala.id != Mundo.ID_SALA_LIMBO and \  
                sala_destino.id != Mundo.ID_SALA_LIMBO:  
                 objeto_ajeno = self.buscar_objeto_ajeno()  
                 if objeto_ajeno != None:  
                     raise ExcepcionDeJuego("No puedes salir llevando " + objeto_ajeno.nombre +  
                                            ". No es de tu propiedad")  
715    
716              if not automatico:              if not automatico:
717                  if self.__anterior != None:                  if self.__anterior != None:
# Line 1277  class Personaje(object): Line 1288  class Personaje(object):
1288          ahora = FechaHoraMine_ahora()          ahora = FechaHoraMine_ahora()
1289    
1290          # Primero limpiamos la lista de tasaciones antiguas          # Primero limpiamos la lista de tasaciones antiguas
1291          for id in self.__tasaciones:          for id in self.__tasaciones.keys()[:]:
1292              (valor, beneficio, fecha) = self.__tasaciones[id]              (valor, beneficio, fecha) = self.__tasaciones[id]
1293              if fecha.anno() != ahora.anno() or \              if fecha.anno() != ahora.anno() or \
1294                 fecha.mes() != ahora.mes() or \                 fecha.mes() != ahora.mes() or \
# Line 1546  class Personaje(object): Line 1557  class Personaje(object):
1557          return objetos[0].nombre          return objetos[0].nombre
1558    
1559    
1560      def comprar(self, vendedor, id_objeto, n_orden=1, n_instancia=1, cantidad=1):      def comprar(self, id_objeto, n_orden=1, n_instancia=1, cantidad=1):
1561          """Este personaje compra un objeto a un vendedor.          """Este personaje compra un objeto a su propietario.
1562    
1563          El objeto debe estar ya en posesión del personaje comprador (o sea, éste).          El objeto debe estar ya en posesión del personaje comprador (o sea, éste).
1564          Si este personaje tiene suficiente dinero, se le transfiere al vendedor          Si este personaje tiene suficiente dinero, se le transfiere al propietario
1565          una cantidad igual al precio de venta de ese objeto, y a cambio el vendedor          una cantidad igual al precio de venta de ese objeto, y a cambio el propietario
1566          le transfiere la propiedad del objeto.          le transfiere la propiedad del objeto.
1567    
         - vendedor es el personaje propietario del objeto  
1568          - id_objeto es el identificador del objeto. Puede haber varios objetos distintos          - id_objeto es el identificador del objeto. Puede haber varios objetos distintos
1569            con el mismo id            con el mismo id
1570          - n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id          - n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id
1571          - n_instancia es para elegir una instancia concreta, si hay mas de una          - n_instancia es para elegir una instancia concreta, si hay mas de una
1572          - cantidad es el numero de instancias a extraer          - cantidad es el numero de instancias a extraer
1573    
1574            Genera un suceso actuar_uno_mismo.
1575    
1576          Requiere:          Requiere:
             vendedor != None  
1577              id_objeto != None              id_objeto != None
1578              n_orden >= 1              n_orden >= 1
1579              n_instancia >= 1              n_instancia >= 1
# Line 1579  class Personaje(object): Line 1590  class Personaje(object):
1590          objetos_comprados = []          objetos_comprados = []
1591          for i in range(0, cantidad):          for i in range(0, cantidad):
1592              objeto = instancias[n_instancia - 1 + i]              objeto = instancias[n_instancia - 1 + i]
             if objeto.propietario != vendedor.id.split("%")[0]:  
                 raise ExcepcionDeJuego("El personaje %d no es el propietario de %d." %  
                                        (vendedor.id.split("%")[0], id_objeto)  
1593              objetos_comprados.append(objeto)              objetos_comprados.append(objeto)
1594    
1595            # Buscar al propietario en la sala actual.
1596            id_propietario = objetos_comprados[0].propietario
1597            if id_propietario == None:
1598                raise ExcepcionDeJuego("No es necesario comprar %s. No tiene propietario." %
1599                                       (id_objeto))
1600            if id_propietario == self.id.split("%")[0]:
1601                raise ExcepcionDeJuego("No es necesario comprar %s. Ya es de tu propiedad." %
1602                                       (id_objeto))
1603    
1604            propietario = None
1605            for personaje in self.__sala.personajes.values():
1606                if personaje != self and personaje.controlador != None and personaje.id.lower().split("%")[0] == id_propietario.lower():
1607                    propietario = personaje
1608                    break
1609    
1610            if propietario == None:
1611                raise ExcepcionDeJuego("El propietario de %s (%s) no se encuentra en la sala" %
1612                                       (id_objeto, id_propietario))
1613    
1614          #%%PROVISIONAL: esto deberá hacerse mediante guiones, cuando estén hechos          #%%PROVISIONAL: esto deberá hacerse mediante guiones, cuando estén hechos
1615          precio = vendedor.precio_venta_objeto(objetos_comprados[0], self) * cantidad          precio = propietario.precio_venta_objeto(objetos_comprados[0], self) * cantidad
1616          if self.dinero < precio:          if self.dinero < precio:
1617              raise ExcepcionDeJuego("No tienes suficiente dinero. " +              raise ExcepcionDeJuego("No tienes suficiente dinero. " +
1618                                     "El precio son %d monedas y tú sólo tienes %d." &                                     "El precio son %d monedas y tú sólo tienes %d." &
1619                                      precio, self.dinero)                                      precio, self.dinero)
1620    
1621          self.pagar(vendedor, precio)          self.pagar(propietario, precio)
1622          for objeto in objetos_comprados:          for objeto in objetos_comprados:
1623              objeto.cambiar_propietario(None)              objeto.cambiar_propietario(None)
1624    
1625            self.actuar_uno_mismo("Has comprado %s a %s por %d monedas." %
1626                                  (id_objeto, id_propietario, precio))
1627    
1628    
1629      def comer(self, id_objeto, n_orden=1, n_instancia=1, sigilo=0):      def comer(self, id_objeto, n_orden=1, n_instancia=1, sigilo=0):
1630          """Come una instancia de un objeto de la mochila.          """Come una instancia de un objeto de la mochila.

Legend:
Removed from v.2.22  
changed lines
  Added in v.2.23

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