379 |
# (por cierto, no existe ningun self.__elem_sal en ningún sitio...) |
# (por cierto, no existe ningun self.__elem_sal en ningún sitio...) |
380 |
|
|
381 |
|
|
382 |
def __init__(self, id, conservar_arbol_xml = 0): |
def __init__(self, id, conservar_arbol_xml = 0, editar_sala = False): |
383 |
"""Crea una sala nueva a partir de un fichero de descripción de sala. |
"""Crea una sala nueva a partir de un fichero de descripción de sala. |
384 |
|
|
385 |
Requiere: |
Requiere: |
386 |
id != None |
id != None |
387 |
id corresponde con un fichero existente |
id corresponde con un fichero existente |
388 |
""" |
""" |
389 |
|
#GPT:Ojo, cuando se edita una sala, puede ser id = "" y no existir fichero |
390 |
|
#Tengo ya la idea para evitar esto, en cuanto pueda lo arreglo, por ahora |
391 |
|
#solo afecta a la invariancia en el caso de editar la sala |
392 |
|
|
393 |
# Atributos privados: |
# Atributos privados: |
394 |
# |
# |
395 |
# __fecha_fichero (int): fecha de la ultima modificacion del fichero de descripción |
# __fecha_fichero (int): fecha de la ultima modificacion del fichero de descripción |
400 |
# __arbol_xml (minidom.Document, opcional): arbol XML leido del fichero de descripcion. |
# __arbol_xml (minidom.Document, opcional): arbol XML leido del fichero de descripcion. |
401 |
|
|
402 |
self.__id = id |
self.__id = id |
403 |
self.__inicializar_sala(conservar_arbol_xml) |
self.__inicializar_sala(conservar_arbol_xml, editar_sala) |
404 |
|
|
405 |
|
|
406 |
def __inicializar_sala(self, conservar_arbol_xml=0): |
def __inicializar_sala(self, conservar_arbol_xml, editar_sala): |
407 |
"""Rellena todos los datos de la sala a partir de su fichero |
"""Rellena todos los datos de la sala a partir de su fichero |
408 |
de descripcion. |
de descripcion. |
409 |
""" |
""" |
410 |
self.__personajes = {} |
self.__personajes = {} |
411 |
self.__n_jugadores = 0 |
self.__n_jugadores = 0 |
412 |
|
if self.__id == "": |
413 |
|
self.__version = Sala.VERSION_DESC_SALA |
414 |
|
self.__autor = "" |
415 |
|
self.__area = "" |
416 |
|
self.__comentario = "" |
417 |
|
self.__nombre = "" |
418 |
|
self.__aura = 50 |
419 |
|
self.__tipo = "sin_tipo" |
420 |
|
self.__subtipo = "sin_subtipo" |
421 |
|
self.__volumen = 1 |
422 |
|
self.__luz = 50 |
423 |
|
self.__combate = "si" |
424 |
|
self.__ocultabilidad = 50 |
425 |
|
self.__descripcion = [] |
426 |
|
self.__salidas = [] |
427 |
|
self.__objetos = [] |
428 |
|
self.__encuentros=[] |
429 |
|
else: |
430 |
|
archivo = os.path.join(Sala.DIR_DESC_SALAS, self.__id.split('-')[0], |
431 |
|
self.__id + Sala.EXT_DESC_SALAS) |
432 |
|
|
433 |
|
self.__fecha_fichero = os.path.getmtime(archivo) |
434 |
|
|
435 |
|
arbol_xml = minidom.parse(archivo) |
436 |
|
|
437 |
|
elem_sala=arbol_xml.documentElement |
438 |
|
self.__parsear_sala(elem_sala) |
439 |
|
|
440 |
|
elem_id = elem_sala.getElementsByTagName('id')[0] |
441 |
|
self.__parsear_id(elem_id) |
442 |
|
|
443 |
|
elem_nombre = elem_sala.getElementsByTagName('nombre')[0] |
444 |
|
self.__parsear_nombre(elem_nombre) |
445 |
|
|
446 |
|
elem_propiedades = elem_sala.getElementsByTagName('propiedades')[0] |
447 |
|
self.__parsear_propiedades(elem_propiedades) |
448 |
|
|
449 |
|
elem_descripcion = elem_sala.getElementsByTagName('descripcion')[0] |
450 |
|
self.__parsear_descripcion(elem_descripcion) |
451 |
|
|
452 |
|
elem_salidas = elem_sala.getElementsByTagName('salidas')[0] |
453 |
|
self.__parsear_salidas(elem_salidas) |
454 |
|
|
455 |
|
elem_objetos = elem_sala.getElementsByTagName('objetos')[0] |
456 |
|
self.__parsear_objetos(elem_objetos, editar_sala) |
457 |
|
|
458 |
|
elem_encuentros = elem_sala.getElementsByTagName('encuentros')[0] |
459 |
|
self.__parsear_encuentros(elem_encuentros, editar_sala) |
460 |
|
|
461 |
archivo = os.path.join(Sala.DIR_DESC_SALAS, self.__id.split('-')[0], |
if conservar_arbol_xml: |
462 |
self.__id + Sala.EXT_DESC_SALAS) |
self.__elem_sala=elem_sala |
463 |
|
self.__elem_id=elem_id |
464 |
self.__fecha_fichero = os.path.getmtime(archivo) |
self.__elem_nombre=elem_nombre |
465 |
|
self.__elem_propiedades=elem_propiedades |
466 |
arbol_xml = minidom.parse(archivo) |
self.__elem_descripcion=elem_descripcion |
467 |
|
self.__elem_salidas=elem_salidas |
468 |
elem_sala=arbol_xml.documentElement |
self.__elem_objetos=elem_objetos |
469 |
self.__parsear_sala(elem_sala) |
self.__elem_encuentros=elem_encuentros |
470 |
|
self.__arbol_xml = arbol_xml |
471 |
elem_id = elem_sala.getElementsByTagName('id')[0] |
|
|
self.__parsear_id(elem_id) |
|
|
|
|
|
elem_nombre = elem_sala.getElementsByTagName('nombre')[0] |
|
|
self.__parsear_nombre(elem_nombre) |
|
|
|
|
|
elem_propiedades = elem_sala.getElementsByTagName('propiedades')[0] |
|
|
self.__parsear_propiedades(elem_propiedades) |
|
|
|
|
|
elem_descripcion = elem_sala.getElementsByTagName('descripcion')[0] |
|
|
self.__parsear_descripcion(elem_descripcion) |
|
|
|
|
|
elem_salidas = elem_sala.getElementsByTagName('salidas')[0] |
|
|
self.__parsear_salidas(elem_salidas) |
|
|
|
|
|
elem_objetos = elem_sala.getElementsByTagName('objetos')[0] |
|
|
self.__parsear_objetos(elem_objetos) |
|
|
|
|
|
elem_encuentros = elem_sala.getElementsByTagName('encuentros')[0] |
|
|
self.__parsear_encuentros(elem_encuentros) |
|
|
|
|
|
if conservar_arbol_xml: |
|
|
self.__elem_sala=elem_sala |
|
|
self.__elem_id=elem_id |
|
|
self.__elem_nombre=elem_nombre |
|
|
self.__elem_propiedades=elem_propiedades |
|
|
self.__elem_descripcion=elem_descripcion |
|
|
self.__elem_salidas=elem_salidas |
|
|
self.__elem_objetos=elem_objetos |
|
|
self.__elem_encuentros=elem_encuentros |
|
|
self.__arbol_xml = arbol_xml |
|
|
|
|
472 |
|
|
473 |
def __parsear_sala(self, elem_sala): |
def __parsear_sala(self, elem_sala): |
474 |
"""Extrae la información del elemento sala: |
"""Extrae la información del elemento sala: |
607 |
"mensaje_cerrado": mensaje_cerrado_salida}) |
"mensaje_cerrado": mensaje_cerrado_salida}) |
608 |
|
|
609 |
|
|
610 |
def __parsear_objetos(self, elem_objetos): |
def __parsear_objetos(self, elem_objetos, editar_sala): |
611 |
"""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.""" |
612 |
|
|
613 |
self.__objetos = [] |
self.__objetos = [] |
667 |
else: |
else: |
668 |
dif_objeto = 0 |
dif_objeto = 0 |
669 |
|
|
670 |
instancias = [] |
instancias = [] |
671 |
for i in range(cantidad_objeto): |
if editar_sala == False: |
672 |
instancia = Objeto(id_objeto) |
for i in range(cantidad_objeto): |
673 |
instancia.contener(self) |
instancias.append(Objeto(id_objeto)) |
674 |
instancias.append(instancia) |
|
675 |
|
self.__objetos.append({"id": id_objeto, |
676 |
self.__objetos.append({"id": id_objeto, |
"probabilidad": prob_objeto, |
677 |
"probabilidad": prob_objeto, |
"maximo": max_objeto, |
678 |
"maximo": max_objeto, |
"dificultad": dif_objeto, |
679 |
"dificultad": dif_objeto, |
"instancias": instancias}) |
680 |
"instancias": instancias}) |
else: |
681 |
|
#GPT Hay que pasar la descripcion al parseado normal (no solo |
682 |
|
# cuando se este editando la sala) y modificar el pickle |
683 |
|
desc_objeto = extraer_contenido_xml(elem_objeto) |
684 |
|
self.__objetos.append({"id": id_objeto, |
685 |
|
"probabilidad": prob_objeto, |
686 |
|
"maximo": max_objeto, |
687 |
|
"dificultad": dif_objeto, |
688 |
|
"cantidad": cantidad_objeto, |
689 |
|
"descripcion": desc_objeto}) |
690 |
|
|
691 |
|
def __parsear_encuentros(self, elem_encuentros, editar_sala): |
|
def __parsear_encuentros(self, elem_encuentros): |
|
692 |
"""Extrae toda la información de los PNJs que hay en la sala inicialmente.""" |
"""Extrae toda la información de los PNJs que hay en la sala inicialmente.""" |
693 |
|
|
694 |
#limpiar_nodos_text_xml(elem_encuentros) |
#limpiar_nodos_text_xml(elem_encuentros) |
743 |
dif_encuentro = 0 |
dif_encuentro = 0 |
744 |
desc_encuentro = extraer_contenido_xml(elem_encuentro) |
desc_encuentro = extraer_contenido_xml(elem_encuentro) |
745 |
|
|
746 |
self.__encuentros.append({"id": id_encuentro, |
if editar_sala == False: |
747 |
"maximo": max_encuentro, |
self.__encuentros.append({"id": id_encuentro, |
748 |
"probabilidad": prob_encuentro, |
"maximo": max_encuentro, |
749 |
"dificultad": dif_encuentro, |
"probabilidad": prob_encuentro, |
750 |
"descripcion": desc_encuentro}) |
"dificultad": dif_encuentro, |
751 |
|
"descripcion": desc_encuentro |
752 |
escribir("Vamos a crear " + str(cant_encuentro) + " pnjs") |
}) |
753 |
for i in range(cant_encuentro): |
|
754 |
id_unico = id_encuentro + '%' + PersonajeNoJugador.nuevo_id() |
escribir("Vamos a crear " + str(cant_encuentro) + " pnjs") |
755 |
escribir("Vamos a crear a " + id_unico) |
for i in range(cant_encuentro): |
756 |
self.__personajes[id_unico] = PersonajeNoJugador.nuevo(id_unico, self) |
id_unico = id_encuentro + '%' + PersonajeNoJugador.nuevo_id() |
757 |
|
escribir("Vamos a crear a " + id_unico) |
758 |
|
self.__personajes[id_unico] = PersonajeNoJugador.nuevo(id_unico, self) |
759 |
|
else: |
760 |
|
self.__encuentros.append({"id": id_encuentro, |
761 |
|
"maximo": max_encuentro, |
762 |
|
"probabilidad": prob_encuentro, |
763 |
|
"dificultad": dif_encuentro, |
764 |
|
"descripcion": desc_encuentro, |
765 |
|
"cantidad":cant_encuentro |
766 |
|
}) |
767 |
|
|
768 |
# Métodos normales |
# Métodos normales |
769 |
|
|