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

Diff of /ambar/sala.py

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

revision 2.0 by pabloruiz, Sat Aug 17 21:11:09 2002 UTC revision 2.1 by amoyav, Tue Nov 5 11:54:43 2002 UTC
# Line 34  import cPickle Line 34  import cPickle
34    
35  from objeto import *  from objeto import *
36  from utils import *  from utils import *
37    from fechahoramine import *
38    
39  class Sala:  class Sala:
40      """Una habitacion o sala dentro del juego.      """Una habitacion o sala dentro del juego.
# Line 62  class Sala: Line 63  class Sala:
63                                   - "dificultad" (int): dificultad para percibirla (0-100)                                   - "dificultad" (int): dificultad para percibirla (0-100)
64                                   - "id" (string): el id de la sala a donde se va por ahi                                   - "id" (string): el id de la sala a donde se va por ahi
65                                   - "descripcion" (string): lo que se ve al mirar en esa direccion                                   - "descripcion" (string): lo que se ve al mirar en esa direccion
66                                     - "tipo_cierre" (string): el tipo de cerradura que hay (ninguno,
67                                                               cerradura, horario, magia)
68                                     - "datos_cierre" (string): información adicional sobre el cierre:
69                                                                * ninguno: vacío
70                                                                * cerradura: id de objeto llave
71                                                                * horario: rango(s) horario(s) de apertura,
72                                                                  formato hora_ini-hora_fin, separados por
73                                                                  comas. Puede incluir un espacio y el id
74                                                                  de la llave que abre cuando está cerrada
75                                                                * magia: id de hechizo (sin implementar)
76                                     - "mensaje_cerrado" (string): mensaje que sale si se intenta salir
77                                                                   estando cerrada.
78       - objetos ({String:any}[]): lista de objetos de la sala, siendo cada objeto un diccionario:       - objetos ({String:any}[]): lista de objetos de la sala, siendo cada objeto un diccionario:
79                                   - "id" (string): el id del objeto                                   - "id" (string): el id del objeto
80                                   - "probabilidad" (int): probabilidad de que reaparezca cada vez                                   - "probabilidad" (int): probabilidad de que reaparezca cada vez
# Line 122  class Sala: Line 135  class Sala:
135        salidas[i]["dificultad"] in range(0,100)        salidas[i]["dificultad"] in range(0,100)
136        salidas[i]["id"] != Null        salidas[i]["id"] != Null
137        salidas[i]["descripcion"] != Null        salidas[i]["descripcion"] != Null
138          salidas[i]["tipo_cierre"] in ("ninguno", "cerradura", "horario", "magia")
139          salidas[i]["datos_cierre"] != Null
140          salidas[i]["mensaje_cerrado"] != Null
141    
142        objetos != None        objetos != None
143        len(objetos) >= 0        len(objetos) >= 0
# Line 150  class Sala: Line 166  class Sala:
166    
167      # Version del sistema de descripciones de sala (se incrementa cada vez que cambia      # Version del sistema de descripciones de sala (se incrementa cada vez que cambia
168      # el formato de los ficheros de desc_salas)      # el formato de los ficheros de desc_salas)
169      VERSION_DESC_SALA = '1.0'      VERSION_DESC_SALA = '1.2'
170    
171      # Version del sistema de salas (se incrementa cada vez que varian los atributos      # Version del sistema de salas (se incrementa cada vez que varian los atributos
172      # de la clase Sala)      # de la clase Sala)
173      VERSION_SALA = '1.1'      VERSION_SALA = '1.2'
174    
175      DIR_DESC_SALAS = 'desc_salas'      DIR_DESC_SALAS = 'desc_salas'
176      EXT_DESC_SALAS = '.xml'      EXT_DESC_SALAS = '.xml'
# Line 342  class Sala: Line 358  class Sala:
358              except:              except:
359                  dif_salida = 0                  dif_salida = 0
360              try:              try:
361                  horario_salida = nodo_salida._attrs.get('horario').value.encode('ISO-8859-1')                  tipo_cierre_salida = nodo_salida._attrs.get('tipo_cierre').value.encode('ISO-8859-1')
362              except:              except:
363                  horario_salida = "0-24"                  tipo_cierre_salida = "ninguno"
364              try:              try:
365                  error_salida = nodo_salida._attrs.get('error').value.encode('ISO-8859-1')                  datos_cierre_salida = nodo_salida._attrs.get('datos_cierre').value.encode('ISO-8859-1')
366              except:              except:
367                  error_salida = "Algo te impide pasar"                  datos_cierre_salida = ""
368                try:
369                    mensaje_cerrado_salida = nodo_salida._attrs.get('mensaje_cerrado').value.encode('ISO-8859-1')
370                except:
371                    mensaje_cerrado_salida = "Algo te impide pasar"
372                                    
373              id_salida = nodo_salida._attrs.get('id').value.encode('ISO-8859-1')              id_salida = nodo_salida._attrs.get('id').value.encode('ISO-8859-1')
374              desc_salida = nodo_salida.childNodes[0].data.encode('ISO-8859-1')              desc_salida = nodo_salida.childNodes[0].data.encode('ISO-8859-1')
375    
376              self.salidas.append({"direccion": direccion_salida,              self.salidas.append({"direccion": direccion_salida,
377                                   "dificultad": dif_salida,                                   "dificultad": dif_salida,
                                  "horario": horario_salida,  
                                  "error": error_salida,  
378                                   "id": id_salida,                                   "id": id_salida,
379                                   "descripcion": desc_salida})                                   "descripcion": desc_salida,
380                                     "tipo_cierre": tipo_cierre_salida,
381                                     "datos_cierre": datos_cierre_salida,
382                                     "mensaje_cerrado": mensaje_cerrado_salida})
383    
384    #                                 "horario": horario_salida,
385    #                                 "error": error_salida})
386    
387      def __parsear_objetos(self, doc_xml):      def __parsear_objetos(self, doc_xml):
388          """Extrae toda la información de los objetos que hay en la sala inicialmente."""          """Extrae toda la información de los objetos que hay en la sala inicialmente."""
# Line 626  class Sala: Line 649  class Sala:
649                                   "instancias":[instancia]})                                   "instancias":[instancia]})
650    
651    
652        def salida_cerrada(self, id_sala_destino):
653            """Comprueba si la salida indicada, y si lo está devuelve el id de la llave,
654            y el mensaje a mostrar si no se puede entrar.
655    
656            Requiere:
657                id_sala_destino apunta a una salida que existe en la sala.
658    
659            Devuelve:
660                una tupla (id_llave, mensaje_error). La id_llave vale None si la puerta está
661                abierta, y "" si no se puede abrir.
662            """
663            for salida in self.salidas:
664                if salida["id"] == id_sala_destino:
665    
666                    tipo_cierre = salida["tipo_cierre"]
667                    if tipo_cierre == "ninguno":
668    
669                        return (None, "")
670    
671                    elif tipo_cierre == "cerradura":
672    
673                        return (salida["datos_cierre"], salida["mensaje_cerrado"])
674    
675                    elif tipo_cierre == "magia":
676    
677                        return ("", salida["mensaje_cerrado"])
678    
679                    elif tipo_cierre == "horario":
680    
681                        # Vamos a procesar el argumento horario, que está en la forma
682                        # "horaini-horafin,horaini-horafin,... idllave"
683    
684                        # Primero, separar el id de la llave
685                        aux = salida["datos_cierre"].split(" ")
686                        rangos = aux[0].split(",")
687                        if len(aux) > 1:
688                            id_llave = aux[1]
689                        else:
690                            id_llave = ""
691    
692                        # Luego, ver si la hora actual está dentro de alguno de los rangos
693                        abierto = 0
694                        ahora = FechaHoraMine_ahora()
695                        for rango in rangos:
696                            aux = rango.split("-")
697                            hora_ini = int(aux[0])
698                            hora_fin = int(aux[1])
699                            if ahora.hora() >= hora_ini and ahora.hora() < hora_fin:
700                                abierto = 1
701                                break
702    
703                        if abierto:
704                            return (None, "")
705                        else:
706                            return (id_llave, salida["mensaje_cerrado"])
707    
708    
709      def salvar(self):      def salvar(self):
710          """Graba en un fichero de salas la sala con todo su contenido."""          """Graba en un fichero de salas la sala con todo su contenido."""
711                    
# Line 647  class Sala: Line 727  class Sala:
727              raise ValueError("Cargada sala " + self.id + " obsoleta: sin versión" +              raise ValueError("Cargada sala " + self.id + " obsoleta: sin versión" +
728                               " cuando se esperaba " + Sala.VERSION_SALA)                               " cuando se esperaba " + Sala.VERSION_SALA)
729    
730          assert(Sala.VERSION_SALA == "1.1")          assert(Sala.VERSION_SALA == "1.2")
731          while self.version != "1.1":          while self.version != "1.2":
732                                                                        
733              if self.version == "1.0":              if self.version == "1.0":
734                  # Versión 1.0 -> 1.1: añadir fecha de modificacion de archivo de descripcion                  # Versión 1.0 -> 1.1: añadir fecha de modificacion de archivo de descripcion
# Line 656  class Sala: Line 736  class Sala:
736                  self.__fecha_fichero = os.path.getmtime(archivo)                  self.__fecha_fichero = os.path.getmtime(archivo)
737                  self.version = "1.1"                  self.version = "1.1"
738                  escribir("Convertida sala " + self.id + " a versión 1.1")                  escribir("Convertida sala " + self.id + " a versión 1.1")
739                elif self.version == "1.1":
740                    # Versión 1.1 -> 1.2: cambiar horario y error por tipo_cierre, datos_cierre
741                    #                     y mensaje_cerrado
742                    for salida in self.salidas:
743                        horario = salida["horario"]
744                        error = salida["error"]
745                        del salida["horario"]
746                        del salida["error"]
747                        if horario == "0-24":
748                            salida["tipo_cierre"] = "ninguno"
749                            salida["datos_cierre"] = ""
750                            salida["mensaje_cerrado"] = ""
751                        else:
752                            salida["tipo_cierre"] = "horario"
753                            salida["datos_cierre"] = horario
754                            salida["mensaje_cerrado"] = mensaje_cerrado
755                    self.version = "1.2"
756                    escribir("Convertida sala " + self.id + " a versión 1.2")
757              else:              else:
758                  raise ValueError("Cargada sala " + self.id + " con versión desconocida: " +                  raise ValueError("Cargada sala " + self.id + " con versión desconocida: " +
759                                   self.version + " cuando se esperaba " + Sala.VERSION_SALA)                                   self.version + " cuando se esperaba " + Sala.VERSION_SALA)

Legend:
Removed from v.2.0  
changed lines
  Added in v.2.1

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