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. |
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 |
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 |
|
|
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 |
|
|
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 |
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): |
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. |
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 |
|
|
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 |
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 |
|
|
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): |