17 |
#along with this program; if not, write to the Free Software |
#along with this program; if not, write to the Free Software |
18 |
#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
19 |
# |
# |
20 |
#Fichero: salaxml.py |
#Fichero: sala.py |
21 |
|
|
22 |
"""Clase Sala.""" |
"""Clase Sala.""" |
23 |
|
|
178 |
self.personajes = {} |
self.personajes = {} |
179 |
self.n_jugadores = 0 |
self.n_jugadores = 0 |
180 |
|
|
181 |
archivo = os.path.join(Sala.DIR_DESC_SALAS, self.id.split('-')[0], self.id + Sala.EXT_DESC_SALAS) |
archivo = os.path.join(Sala.DIR_DESC_SALAS, self.id.split('-')[0], |
182 |
|
self.id + Sala.EXT_DESC_SALAS) |
183 |
stream = open(archivo) |
stream = open(archivo) |
184 |
doc_xml = minidom.parse(stream).documentElement |
doc_xml = minidom.parse(stream).documentElement |
185 |
stream.close() |
stream.close() |
187 |
self.__fecha_fichero = os.path.getmtime(archivo) |
self.__fecha_fichero = os.path.getmtime(archivo) |
188 |
|
|
189 |
self.__iniciar_parseador(doc_xml) |
self.__iniciar_parseador(doc_xml) |
190 |
|
|
191 |
self.__parsear_sala(doc_xml) |
self.__parsear_sala(doc_xml) |
192 |
self.__parsear_id(doc_xml) |
self.__parsear_id(doc_xml) |
193 |
self.__parsear_nombre(doc_xml) |
self.__parsear_nombre(doc_xml) |
225 |
try: |
try: |
226 |
self.comentario = doc_xml.attributes["comentario"].value.encode('ISO-8859-1') |
self.comentario = doc_xml.attributes["comentario"].value.encode('ISO-8859-1') |
227 |
except: |
except: |
228 |
self.comentario = "nada" |
self.comentario = "" |
229 |
|
|
230 |
|
|
231 |
def __parsear_id(self, doc_xml): |
def __parsear_id(self, doc_xml): |
291 |
|
|
292 |
self.descripcion.append({"dificultad": dif_item, "texto": texto_item}) |
self.descripcion.append({"dificultad": dif_item, "texto": texto_item}) |
293 |
|
|
294 |
|
|
295 |
def __parsear_decorativos(self, doc_xml): |
def __parsear_decorativos(self, doc_xml): |
296 |
"""Extrae el texto y la dificultad asociada de los items decorativos de la sala""" |
"""Extrae el texto y la dificultad asociada de los items decorativos de la sala""" |
297 |
|
|
564 |
|
|
565 |
for objeto in self.objetos: |
for objeto in self.objetos: |
566 |
for instancia in objeto["instancias"]: |
for instancia in objeto["instancias"]: |
567 |
ocupado += instancia.volumen |
ocupado += instancia.volumen() |
568 |
|
|
569 |
return ocupado |
return ocupado |
570 |
|
|
592 |
if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0: |
if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0: |
593 |
del self.objetos[n_objeto] |
del self.objetos[n_objeto] |
594 |
|
|
595 |
return instancia |
instancia.activar() |
|
|
|
596 |
|
|
597 |
#%% def coger_objeto(self, personaje, nombre_objeto): |
return instancia |
|
#%% """ |
|
|
#%% Método que extrae un objeto de los objetos de la sala y lo añade al equipo del personaje. |
|
|
#%% |
|
|
#%% Requiere: |
|
|
#%% personaje != None |
|
|
#%% nombre_objeto != None |
|
|
#%% tirada_percep_sala != None |
|
|
#%% |
|
|
#%% Asegura: |
|
|
#%% encontrado 1 or 0. |
|
|
#%% """ |
|
|
#%% encontrado = 0 |
|
|
#%% existe_ya_uno = 0 |
|
|
#%% |
|
|
#%% for objeto in self.objetos[:]: |
|
|
#%% if objeto["id"] == nombre_objeto and len(objeto["instancias"]) > 0: |
|
|
#%% encontrado = 1 |
|
|
#%% |
|
|
#%% if len(personaje.equipo) == 0: |
|
|
#%% personaje.equipo.append({"id":nombre_objeto,"instancias":[objeto["instancias"][0]]}) |
|
|
#%% else: |
|
|
#%% for objeto_en_equipo in personaje.equipo: |
|
|
#%% if objeto_en_equipo["id"] == nombre_objeto: |
|
|
#%% existe_ya_uno = 1 |
|
|
#%% objeto_en_equipo["instancias"].append(objeto["instancias"][0]) |
|
|
#%% if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0: |
|
|
#%% self.objetos.remove(objeto) |
|
|
#%% break |
|
|
#%% if existe_ya_uno == 0: |
|
|
#%% personaje.equipo.append({"id":nombre_objeto,"instancias":[objeto["instancias"][0]]}) |
|
|
#%% else: |
|
|
#%% pass |
|
|
#%% |
|
|
#%% objeto["instancias"].pop(0) |
|
598 |
|
|
599 |
|
|
600 |
def dejar_objeto(self, instancia, dificultad = 0): |
def dejar_objeto(self, instancia, dificultad = 0): |
610 |
encontrado = 0 |
encontrado = 0 |
611 |
|
|
612 |
for objeto in self.objetos: |
for objeto in self.objetos: |
613 |
if objeto["id"] == instancia.id: |
if objeto["id"] == instancia.id(): |
614 |
encontrado = 1 |
encontrado = 1 |
615 |
objeto["instancias"].append(instancia) |
objeto["instancias"].append(instancia) |
616 |
break |
break |
617 |
|
|
618 |
if not encontrado: |
if not encontrado: |
619 |
self.objetos.append({"id":instancia.id, |
self.objetos.append({"id":instancia.id(), |
620 |
"probabilidad":0, |
"probabilidad":0, |
621 |
"maximo":0, |
"maximo":0, |
622 |
"dificultad":dificultad, |
"dificultad":dificultad, |
623 |
"instancias":[instancia]}) |
"instancias":[instancia]}) |
624 |
|
|
625 |
|
|
|
#%% def dejar_objeto(self, personaje, nombre_objeto, dif=0): |
|
|
#%% """ |
|
|
#%% Método que extrae un objeto del equipo del personaje y lo añade a los objetos de la sala. |
|
|
#%% No hace falta comprobar por el volumen del objeto, porque si el personaje ha podido |
|
|
#%% entrar en la sala cargándolo, el volumen ocupado no va a cambiar por el hecho de que |
|
|
#%% lo suelte. |
|
|
#%% |
|
|
#%% Requiere: |
|
|
#%% personaje != None |
|
|
#%% nombre_objeto != None |
|
|
#%% |
|
|
#%% Asegura: |
|
|
#%% encontrado 0 or 1 |
|
|
#%% """ |
|
|
#%% |
|
|
#%% encontrado = 0 |
|
|
#%% |
|
|
#%% for objeto_en_equipo in personaje.equipo: |
|
|
#%% if objeto_en_equipo["id"] == nombre_objeto and len(objeto_en_equipo["instancias"]) > 0: |
|
|
#%% obj = objeto_en_equipo["instancias"][0] |
|
|
#%% existe_uno_igual = 0 |
|
|
#%% for objeto in self.objetos: |
|
|
#%% if (nombre_objeto == objeto["id"] and objeto["dificultad"] == dif): |
|
|
#%% objeto["instancias"].append(obj) |
|
|
#%% existe_uno_igual = 1 |
|
|
#%% break |
|
|
#%% else: |
|
|
#%% pass |
|
|
#%% if existe_uno_igual == 0: |
|
|
#%% self.objetos.append({"id":nombre_objeto,"probabilidad":0,"dificultad":dif, |
|
|
#%% "instancias":[obj]}) |
|
|
#%% objeto_en_equipo["instancias"].pop(0) |
|
|
#%% # self.cmd_actuacion_personaje("deja "+obj.nombre) |
|
|
#%% encontrado = 1 |
|
|
#%% break #salimos ya que ya hemos dejado un objeto. |
|
|
#%% |
|
|
#%% return encontrado, nombre_objeto |
|
|
|
|
|
|
|
626 |
def salvar(self): |
def salvar(self): |
627 |
"""Graba en un fichero de salas la sala con todo su contenido.""" |
"""Graba en un fichero de salas la sala con todo su contenido.""" |
628 |
|
|
640 |
self.__dict__ = atributos |
self.__dict__ = atributos |
641 |
|
|
642 |
# Verificar la versión. |
# Verificar la versión. |
643 |
|
if not self.__dict__.has_key("version"): |
644 |
|
raise ValueError("Cargada sala " + self.id + " obsoleta: sin versión" + |
645 |
|
" cuando se esperaba " + Sala.VERSION_SALA) |
646 |
|
|
647 |
assert(Sala.VERSION_SALA == "1.1") |
assert(Sala.VERSION_SALA == "1.1") |
648 |
while self.version != "1.1": |
while self.version != "1.1": |
|
|
|
|
if not self.__dict__.has_key("version"): |
|
|
raise ValueError("Cargada sala " + self.id + " obsoleta: sin versión" + |
|
|
" cuando se esperaba " + Sala.VERSION_SALA) |
|
649 |
|
|
650 |
if self.version == "1.0": |
if self.version == "1.0": |
651 |
# 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 |