136 |
|
|
137 |
# Versión del sistema de personajes (se incrementa al cambiar cualquiera |
# Versión del sistema de personajes (se incrementa al cambiar cualquiera |
138 |
# de Personaje, PersonajeJugador o PersonajeNoJugador) |
# de Personaje, PersonajeJugador o PersonajeNoJugador) |
139 |
VERSION = '1.4' |
VERSION = '1.5' |
140 |
|
|
141 |
# Resultados de comparar otro personaje con este |
# Resultados de comparar otro personaje con este |
142 |
COMP_INF_MAS_FUERTE = 9 |
COMP_INF_MAS_FUERTE = 9 |
197 |
self.__cuerpo[posicion] = None |
self.__cuerpo[posicion] = None |
198 |
|
|
199 |
|
|
200 |
def __setattr__(self, name, value): |
# def __setattr__(self, name, value): |
201 |
"""Realiza ajustes automáticos al modificar cualquier parámetro""" |
# """Realiza ajustes automáticos al modificar cualquier parámetro""" |
202 |
|
# |
203 |
# Esto es de momento, para verificar que nadie intenta tocar esto |
# # Esto es de momento, para verificar que nadie intenta tocar esto |
204 |
# directamente. Cuando tenga un rato, pondré todos los atributos |
# # directamente. Cuando tenga un rato, pondré todos los atributos |
205 |
# privados, y ya se podrá quitar esto y todos los self.__dict__[]... |
# # privados, y ya se podrá quitar esto y todos los self.__dict__[]... |
206 |
if name == "experiencia": |
# if name == "experiencia": |
207 |
raise AttributeError("la experiencia hay que cambiarla con método poner_experiencia()") |
# raise AttributeError("la experiencia hay que cambiarla con método poner_experiencia()") |
208 |
elif name == "nivel": |
# elif name == "nivel": |
209 |
raise AttributeError("el nivel hay que cambiarlo con método poner_nivel()") |
# raise AttributeError("el nivel hay que cambiarlo con método poner_nivel()") |
210 |
elif name == "sala": |
# elif name == "sala": |
211 |
raise AttributeError("la sala hay que cambiarla con método mover()") |
# raise AttributeError("la sala hay que cambiarla con método mover()") |
212 |
else: |
# else: |
213 |
self.__dict__[name] = value |
# self.__dict__[name] = value |
214 |
|
|
215 |
|
|
216 |
def __del__(self): |
def __del__(self): |
218 |
if self.controlador != None: |
if self.controlador != None: |
219 |
self.liberar() |
self.liberar() |
220 |
if self.sala != None: |
if self.sala != None: |
221 |
self.sala.salir_personaje(self) |
if self in self.sala.personajes.values(): |
222 |
for otro_personaje in self.sala.personajes.values(): |
self.sala.salir_personaje(self) |
223 |
if otro_personaje.controlador != None: |
for otro_personaje in self.sala.personajes.values(): |
224 |
otro_personaje.controlador.sale_personaje(self, "el vacío") |
if otro_personaje.controlador != None: |
225 |
|
otro_personaje.controlador.sale_personaje(self, "el vacío") |
226 |
self.__dict__["sala"] = None |
self.__dict__["sala"] = None |
227 |
|
|
228 |
|
|
250 |
|
|
251 |
|
|
252 |
def __setstate__(self, atributos): |
def __setstate__(self, atributos): |
253 |
"""Método llamado para restaurar los atributos provinientes de un |
"""Método llamado para restaurar los atributos provinientes de un pickle.""" |
|
pickle.""" |
|
254 |
from personajenojugador import PersonajeNoJugador |
from personajenojugador import PersonajeNoJugador |
255 |
from interfazpnj import InterfazPNJ |
from interfazpnj import InterfazPNJ |
256 |
|
|
257 |
self.__dict__ = atributos |
self.__dict__ = atributos |
258 |
|
|
|
# Recuperar el controlador |
|
|
if isinstance(self, PersonajeNoJugador): |
|
|
|
|
|
# PNJ: se crea el controlador al momento |
|
|
self.controlador_automatico() |
|
|
|
|
|
else: |
|
|
|
|
|
# PJ: el controlador se restaura a None |
|
|
self.__dict__["controlador"] = None |
|
|
|
|
|
# Recuperar los idiomas, buscando por nombre. |
|
|
idiomas_instancias = {} |
|
|
for idioma_nombre in atributos["idiomas"].keys(): |
|
|
idioma = Idioma_buscar(idioma_nombre) |
|
|
idiomas_instancias[idioma] = atributos["idiomas"][idioma_nombre] |
|
|
|
|
|
self.__dict__["idiomas"] = idiomas_instancias |
|
|
|
|
|
if isinstance(atributos["idioma_base"], Idioma): |
|
|
idioma_base = Idioma_buscar(atributos["idioma_base"].nombre) # parche para arreglar algunos pjs que se grabaron mal |
|
|
else: |
|
|
idioma_base = Idioma_buscar(atributos["idioma_base"]) |
|
|
self.__dict__["idioma_base"] = idioma_base |
|
|
|
|
259 |
# Verificar la versión. |
# Verificar la versión. |
260 |
assert(Personaje.VERSION == "1.4") |
assert(Personaje.VERSION == "1.5") |
261 |
while self.version != "1.4": |
while self.version != "1.5": |
262 |
|
|
263 |
if not self.__dict__.has_key("version"): |
if not self.__dict__.has_key("version"): |
264 |
raise ValueError("Cargado personaje " + self.id + " obsoleto: sin versión" + |
raise ValueError("Cargado personaje " + self.id + " obsoleto: sin versión" + |
314 |
self.ids_amigos = {} |
self.ids_amigos = {} |
315 |
self.version = "1.4" |
self.version = "1.4" |
316 |
escribir("Convertido personaje " + self.id + " a versión 1.4") |
escribir("Convertido personaje " + self.id + " a versión 1.4") |
317 |
|
elif self.version == "1.4": |
318 |
|
# Versión 1.4 -> 1.5: (solo pnj) quitar posesion y añadir autor, area, |
319 |
|
# tipo_controlador y datos_controlador |
320 |
|
if isinstance(self, PersonajeNoJugador): |
321 |
|
del self.posesion |
322 |
|
self._PersonajeNoJugador__autor = "hirunatan" |
323 |
|
self._PersonajeNoJugador__area = "" |
324 |
|
if self.id.split('%')[0].lower() == "tutora": |
325 |
|
self._PersonajeNoJugador__tipo_controlador = "hablante" |
326 |
|
self._PersonajeNoJugador__datos_controlador = "tutora" |
327 |
|
elif self.id.split('%')[0].lower() == "posadero": |
328 |
|
self._PersonajeNoJugador__tipo_controlador = "hablante" |
329 |
|
self._PersonajeNoJugador__datos_controlador = "posadero" |
330 |
|
else: |
331 |
|
self._PersonajeNoJugador__tipo_controlador = "estandar" |
332 |
|
self._PersonajeNoJugador__datos_controlador = "" |
333 |
|
self.version = "1.5" |
334 |
|
escribir("Convertido personaje " + self.id + " a versión 1.5") |
335 |
else: |
else: |
336 |
raise ValueError("Cargado personaje " + self.id + " con versión desconocida: " + |
raise ValueError("Cargado personaje " + self.id + " con versión desconocida: " + |
337 |
self.version + " cuando se esperaba " + Personaje.VERSION) |
self.version + " cuando se esperaba " + Personaje.VERSION) |
338 |
|
|
339 |
|
# Recuperar el controlador |
340 |
|
if isinstance(self, PersonajeNoJugador): |
341 |
|
|
342 |
|
# PNJ: se crea el controlador al momento |
343 |
|
self.controlador_automatico() |
344 |
|
|
345 |
|
else: |
346 |
|
|
347 |
|
# PJ: el controlador se restaura a None |
348 |
|
self.__dict__["controlador"] = None |
349 |
|
|
350 |
|
# Recuperar los idiomas, buscando por nombre. |
351 |
|
idiomas_instancias = {} |
352 |
|
for idioma_nombre in atributos["idiomas"].keys(): |
353 |
|
idioma = Idioma_buscar(idioma_nombre) |
354 |
|
idiomas_instancias[idioma] = atributos["idiomas"][idioma_nombre] |
355 |
|
|
356 |
|
self.__dict__["idiomas"] = idiomas_instancias |
357 |
|
|
358 |
|
if isinstance(atributos["idioma_base"], Idioma): |
359 |
|
idioma_base = Idioma_buscar(atributos["idioma_base"].nombre) # parche para arreglar algunos pjs que se grabaron mal |
360 |
|
else: |
361 |
|
idioma_base = Idioma_buscar(atributos["idioma_base"]) |
362 |
|
self.__dict__["idioma_base"] = idioma_base |
363 |
|
|
364 |
|
|
365 |
def mochila(self): |
def mochila(self): |
366 |
return self.__mochila |
return self.__mochila |