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.6' |
VERSION = '1.5.7' |
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 |
474 |
raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" + |
raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" + |
475 |
" cuando se esperaba " + Personaje.VERSION) |
" cuando se esperaba " + Personaje.VERSION) |
476 |
|
|
477 |
assert(Personaje.VERSION == "1.5.6") |
assert(Personaje.VERSION == "1.5.7") |
478 |
while self.__version != "1.5.6": |
while self.__version != "1.5.7": |
479 |
|
|
480 |
# 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 |
481 |
# 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 |
488 |
escribir("Convertido personaje " + self.__id + " a versión 1.5.2") |
escribir("Convertido personaje " + self.__id + " a versión 1.5.2") |
489 |
elif self.__version == "1.5.2": |
elif self.__version == "1.5.2": |
490 |
# Versión 1.5.2 -> 1.5.3: añadir __hambre y __sed, la raza ahora |
# Versión 1.5.2 -> 1.5.3: añadir __hambre y __sed, la raza ahora |
491 |
# es solo el nombre y no la instancia entera. |
# es solo el nombre y no la instancia entera (sólo PJs). |
492 |
if isinstance(self, PersonajeJugador): |
if isinstance(self, PersonajeJugador): |
493 |
self._PersonajeJugador__hambre = 0 |
self._PersonajeJugador__hambre = 0 |
494 |
self._PersonajeJugador__sed = 0 |
self._PersonajeJugador__sed = 0 |
517 |
self.__tasaciones = {} |
self.__tasaciones = {} |
518 |
self.__version = "1.5.6" |
self.__version = "1.5.6" |
519 |
escribir("Convertido personaje " + self.__id + " a versión 1.5.6") |
escribir("Convertido personaje " + self.__id + " a versión 1.5.6") |
520 |
|
elif self.__version == "1.5.6": |
521 |
|
# Versión 1.5.6 -> 1.5.7: añadir contadores y etiquetas (sólo PNJs) |
522 |
|
if isinstance(self, PersonajeNoJugador): |
523 |
|
self.__contadores = {} |
524 |
|
self.__etiquetas = {} |
525 |
|
self.__version = "1.5.7" |
526 |
|
escribir("Convertido personaje " + self.__id + " a versión 1.5.7") |
527 |
else: |
else: |
528 |
raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " + |
raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " + |
529 |
self.__version + " cuando se esperaba " + Personaje.VERSION) |
self.__version + " cuando se esperaba " + Personaje.VERSION) |
591 |
self.__vida = self.__max_vida |
self.__vida = self.__max_vida |
592 |
|
|
593 |
|
|
594 |
def atributo(self, atributo): |
def atributo(self, nombre_atributo): |
595 |
"""Devuelve el valor del atributo con el nombre indicado. |
"""Devuelve el valor del atributo con el nombre indicado. |
596 |
|
|
597 |
Es útil para requisitos. |
Es útil para requisitos. |
598 |
|
|
599 |
Requiere: |
Requiere: |
600 |
atributo in self.__atrib.keys() |
nombre_atributo in self.__atrib.keys() |
601 |
""" |
""" |
602 |
return self.__atrib[atributo] |
return self.__atrib[nombre_atributo] |
603 |
|
|
604 |
|
|
605 |
|
|
606 |
def cambiar_atributo(self, atributo, niveles): |
def cambiar_atributo(self, nombre_atributo, niveles): |
607 |
"""Modifica el valor del atributo con el nombre indicado. |
"""Modifica el valor del atributo con el nombre indicado. |
608 |
|
|
609 |
El valor del parámetro niveles es sumado al del valor del atributo. Puede ser negativo. |
El valor del parámetro niveles es sumado al del valor del atributo. Puede ser negativo. |
610 |
Si el resultado es menor que 0 o mayor que el máximo, se trunca. <-%% ojo, sin hacer |
Si el resultado es menor que 0 o mayor que el máximo, se trunca. <-%% ojo, sin hacer |
611 |
|
|
612 |
Requiere: |
Requiere: |
613 |
atributo in self.__atrib.keys() |
nombre_atributo in self.__atrib.keys() |
614 |
""" |
""" |
615 |
self.__atrib[atributo] += niveles |
self.__atrib[nombre_atributo] += niveles |
616 |
#%% OJO, comprobar los máximos... |
#%% OJO, comprobar los máximos... |
617 |
|
|
618 |
|
|
699 |
Asegura: |
Asegura: |
700 |
self.sala == sala_destino |
self.sala == sala_destino |
701 |
""" |
""" |
702 |
try: |
from mundo import Mundo |
703 |
|
if self.__sala.id != Mundo.ID_SALA_LIMBO and \ |
704 |
|
sala_destino.id != Mundo.ID_SALA_LIMBO: |
705 |
|
objeto_ajeno = self.buscar_objeto_ajeno() |
706 |
|
if objeto_ajeno != None: |
707 |
|
mensaje = "No puedes salir llevando " + objeto_ajeno.nombre + \ |
708 |
|
". No es de tu propiedad." |
709 |
|
if self.__anterior != None: |
710 |
|
mensaje += "\nYa no sigues a " + self.__anterior.id + "." |
711 |
|
self.no_seguir() |
712 |
|
raise ExcepcionDeJuego(mensaje) |
713 |
|
|
714 |
from mundo import Mundo |
try: |
|
if self.__sala.id != Mundo.ID_SALA_LIMBO and \ |
|
|
sala_destino.id != Mundo.ID_SALA_LIMBO: |
|
|
objeto_ajeno = self.buscar_objeto_ajeno() |
|
|
if objeto_ajeno != None: |
|
|
raise ExcepcionDeJuego("No puedes salir llevando " + objeto_ajeno.nombre + |
|
|
". No es de tu propiedad") |
|
715 |
|
|
716 |
if not automatico: |
if not automatico: |
717 |
if self.__anterior != None: |
if self.__anterior != None: |
1288 |
ahora = FechaHoraMine_ahora() |
ahora = FechaHoraMine_ahora() |
1289 |
|
|
1290 |
# Primero limpiamos la lista de tasaciones antiguas |
# Primero limpiamos la lista de tasaciones antiguas |
1291 |
for id in self.__tasaciones: |
for id in self.__tasaciones.keys()[:]: |
1292 |
(valor, beneficio, fecha) = self.__tasaciones[id] |
(valor, beneficio, fecha) = self.__tasaciones[id] |
1293 |
if fecha.anno() != ahora.anno() or \ |
if fecha.anno() != ahora.anno() or \ |
1294 |
fecha.mes() != ahora.mes() or \ |
fecha.mes() != ahora.mes() or \ |
1557 |
return objetos[0].nombre |
return objetos[0].nombre |
1558 |
|
|
1559 |
|
|
1560 |
def comprar(self, vendedor, id_objeto, n_orden=1, n_instancia=1, cantidad=1): |
def comprar(self, id_objeto, n_orden=1, n_instancia=1, cantidad=1): |
1561 |
"""Este personaje compra un objeto a un vendedor. |
"""Este personaje compra un objeto a su propietario. |
1562 |
|
|
1563 |
El objeto debe estar ya en posesión del personaje comprador (o sea, éste). |
El objeto debe estar ya en posesión del personaje comprador (o sea, éste). |
1564 |
Si este personaje tiene suficiente dinero, se le transfiere al vendedor |
Si este personaje tiene suficiente dinero, se le transfiere al propietario |
1565 |
una cantidad igual al precio de venta de ese objeto, y a cambio el vendedor |
una cantidad igual al precio de venta de ese objeto, y a cambio el propietario |
1566 |
le transfiere la propiedad del objeto. |
le transfiere la propiedad del objeto. |
1567 |
|
|
|
- vendedor es el personaje propietario del objeto |
|
1568 |
- id_objeto es el identificador del objeto. Puede haber varios objetos distintos |
- id_objeto es el identificador del objeto. Puede haber varios objetos distintos |
1569 |
con el mismo id |
con el mismo id |
1570 |
- n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id |
- n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id |
1571 |
- n_instancia es para elegir una instancia concreta, si hay mas de una |
- n_instancia es para elegir una instancia concreta, si hay mas de una |
1572 |
- cantidad es el numero de instancias a extraer |
- cantidad es el numero de instancias a extraer |
1573 |
|
|
1574 |
|
Genera un suceso actuar_uno_mismo. |
1575 |
|
|
1576 |
Requiere: |
Requiere: |
|
vendedor != None |
|
1577 |
id_objeto != None |
id_objeto != None |
1578 |
n_orden >= 1 |
n_orden >= 1 |
1579 |
n_instancia >= 1 |
n_instancia >= 1 |
1590 |
objetos_comprados = [] |
objetos_comprados = [] |
1591 |
for i in range(0, cantidad): |
for i in range(0, cantidad): |
1592 |
objeto = instancias[n_instancia - 1 + i] |
objeto = instancias[n_instancia - 1 + i] |
|
if objeto.propietario != vendedor.id.split("%")[0]: |
|
|
raise ExcepcionDeJuego("El personaje %d no es el propietario de %d." % |
|
|
(vendedor.id.split("%")[0], id_objeto) |
|
1593 |
objetos_comprados.append(objeto) |
objetos_comprados.append(objeto) |
1594 |
|
|
1595 |
|
# Buscar al propietario en la sala actual. |
1596 |
|
id_propietario = objetos_comprados[0].propietario |
1597 |
|
if id_propietario == None: |
1598 |
|
raise ExcepcionDeJuego("No es necesario comprar %s. No tiene propietario." % |
1599 |
|
(id_objeto)) |
1600 |
|
if id_propietario == self.id.split("%")[0]: |
1601 |
|
raise ExcepcionDeJuego("No es necesario comprar %s. Ya es de tu propiedad." % |
1602 |
|
(id_objeto)) |
1603 |
|
|
1604 |
|
propietario = None |
1605 |
|
for personaje in self.__sala.personajes.values(): |
1606 |
|
if personaje != self and personaje.controlador != None and personaje.id.lower().split("%")[0] == id_propietario.lower(): |
1607 |
|
propietario = personaje |
1608 |
|
break |
1609 |
|
|
1610 |
|
if propietario == None: |
1611 |
|
raise ExcepcionDeJuego("El propietario de %s (%s) no se encuentra en la sala" % |
1612 |
|
(id_objeto, id_propietario)) |
1613 |
|
|
1614 |
#%%PROVISIONAL: esto deberá hacerse mediante guiones, cuando estén hechos |
#%%PROVISIONAL: esto deberá hacerse mediante guiones, cuando estén hechos |
1615 |
precio = vendedor.precio_venta_objeto(objetos_comprados[0], self) * cantidad |
precio = propietario.precio_venta_objeto(objetos_comprados[0], self) * cantidad |
1616 |
if self.dinero < precio: |
if self.dinero < precio: |
1617 |
raise ExcepcionDeJuego("No tienes suficiente dinero. " + |
raise ExcepcionDeJuego("No tienes suficiente dinero. " + |
1618 |
"El precio son %d monedas y tú sólo tienes %d." & |
"El precio son %d monedas y tú sólo tienes %d." & |
1619 |
precio, self.dinero) |
precio, self.dinero) |
1620 |
|
|
1621 |
self.pagar(vendedor, precio) |
self.pagar(propietario, precio) |
1622 |
for objeto in objetos_comprados: |
for objeto in objetos_comprados: |
1623 |
objeto.cambiar_propietario(None) |
objeto.cambiar_propietario(None) |
1624 |
|
|
1625 |
|
self.actuar_uno_mismo("Has comprado %s a %s por %d monedas." % |
1626 |
|
(id_objeto, id_propietario, precio)) |
1627 |
|
|
1628 |
|
|
1629 |
def comer(self, id_objeto, n_orden=1, n_instancia=1, sigilo=0): |
def comer(self, id_objeto, n_orden=1, n_instancia=1, sigilo=0): |
1630 |
"""Come una instancia de un objeto de la mochila. |
"""Come una instancia de un objeto de la mochila. |