47 |
COMANDOS_POSIBLES = ['+salir','+doc','+ip','+seguir','+noseguir','+hablar','+hablarq','+hablaro','+hablare',\ |
COMANDOS_POSIBLES = ['+salir','+doc','+ip','+seguir','+noseguir','+hablar','+hablarq','+hablaro','+hablare',\ |
48 |
'+susurrar','+susurrarq','+susurrare','+susurraro','+gritar','+gritarq','+gritare','+gritaro',\ |
'+susurrar','+susurrarq','+susurrare','+susurraro','+gritar','+gritarq','+gritare','+gritaro',\ |
49 |
'+idioma','+actuar','+decir','+preguntar','+atacar','+coger','+dejar','+esconder','+mochila',\ |
'+idioma','+actuar','+decir','+preguntar','+atacar','+coger','+dejar','+esconder','+mochila',\ |
50 |
'+examinar','+usar','+estadisticas','+mirar','+mr','+area','+observar','+silencio'] |
'+examinar','+usar','+estadisticas','+mirar','+mr','+area','+observar','+silencio','+confiar','+noconfiar',\ |
51 |
|
'+dar','+amigos'] |
52 |
|
|
53 |
COMANDOS_MAIAR = ['+entorno','+ent','+listar','+localizar','+loc'] |
COMANDOS_MAIAR = ['+entorno','+ent','+listar','+localizar','+loc'] |
54 |
|
|
160 |
""" |
""" |
161 |
self.conn().send(personaje.id + " susurra: " + personaje.color_texto() + mensaje + finl) |
self.conn().send(personaje.id + " susurra: " + personaje.color_texto() + mensaje + finl) |
162 |
|
|
163 |
|
def comunicar_evento_personaje(self, personaje, mensaje): |
164 |
|
"""Metodo llamado cuando un personaje protagoniza un evento y |
165 |
|
nuestro personaje se da cuenta. |
166 |
|
|
167 |
|
personaje -- el personaje que hace algo. |
168 |
|
mensaje -- lo que acontece. |
169 |
|
""" |
170 |
|
self.conn().send(personaje.color_texto() + personaje.nombre + ' ' + mensaje + finl) |
171 |
|
|
172 |
|
|
173 |
def habla_unomismo(self, mensaje): |
def habla_unomismo(self, mensaje): |
174 |
"""Metodo llamado cuando uno se habla a sí mismo. |
"""Metodo llamado cuando uno se habla a sí mismo. |
488 |
|
|
489 |
self.estado_0() |
self.estado_0() |
490 |
|
|
491 |
#%% try: |
elif accion == "+dar": |
492 |
#%% nombre_objeto = (len(args) > 0 and args[0]) or "" |
(id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok) = \ |
493 |
#%% cantidad = int((len(args) > 1 and args[1])) or 1 |
self.parsear_ident_objeto(args, "dar") |
494 |
#%% self.cmd_dejar(nombre_objeto,cantidad) |
if ok: |
495 |
#%% self.estado_0() |
self.cmd_dar(id_receptor, id_objeto, cantidad, n_orden, n_instancia) |
496 |
#%% except: |
|
497 |
#%% self.conn().send('Ha ocurrido un error. Consulta la sintaxis del comando en la ayuda con +?') |
self.estado_0() |
498 |
#%% self.estado_0() |
|
499 |
|
elif accion == "+confiar": |
500 |
|
id_personaje_de_confianza = args[0] |
501 |
|
self.__personaje.ids_amigos.update({id_personaje_de_confianza:1}) |
502 |
|
self.conn().send("A partir de ahora confías en "+id_personaje_de_confianza) |
503 |
|
|
504 |
|
self.estado_0() |
505 |
|
|
506 |
|
elif accion == "+noconfiar": |
507 |
|
id_personaje_de_no_confianza = args[0] |
508 |
|
self.__personaje.ids_amigos.update({id_personaje_de_no_confianza:0}) |
509 |
|
self.conn().send("A partir de ahora no confías en "+id_personaje_de_no_confianza) |
510 |
|
|
511 |
|
self.estado_0() |
512 |
|
|
513 |
|
elif accion == "+amigos": |
514 |
|
self.cmd_listar_amigos() |
515 |
|
self.estado_0() |
516 |
|
|
517 |
|
|
518 |
elif accion == "+esc" or accion == "+esconder": |
elif accion == "+esc" or accion == "+esconder": |
519 |
(id_objeto, cantidad, n_orden, n_instancia, ok) = \ |
(id_objeto, cantidad, n_orden, n_instancia, ok) = \ |
640 |
|
|
641 |
def parsear_ident_objeto(self, args, comando): |
def parsear_ident_objeto(self, args, comando): |
642 |
"""Pequeña funcion utilitaria para parsear la secuencia |
"""Pequeña funcion utilitaria para parsear la secuencia |
643 |
[<cantidad>] id_objeto [<n_orden>] [<n_instancia>]. |
[<id_receptor>] [<cantidad>] id_objeto [<n_orden>] [<n_instancia>]. |
644 |
|
|
645 |
cantidad, n_orden y n_instancia se reconocen porque son sólo dígitos. |
cantidad, n_orden y n_instancia se reconocen porque son sólo dígitos. |
646 |
id_objeto puede tener más de una palabra. |
id_objeto puede tener más de una palabra. |
647 |
|
receptor sólo puede tener una palabra. |
648 |
""" |
""" |
649 |
cantidad = 1 |
cantidad = 1 |
650 |
id_objeto = "" |
id_objeto = "" |
651 |
|
id_receptor = "" |
652 |
n_orden = 1 |
n_orden = 1 |
653 |
n_instancia = 1 |
n_instancia = 1 |
654 |
ok = 0 |
ok = 0 |
655 |
|
|
656 |
i = 0 |
i = 0 |
657 |
|
|
658 |
|
if comando == 'dar' and i < len(args) and not args[i].isdigit(): |
659 |
|
id_receptor = args[i] |
660 |
|
i = i + 1 |
661 |
|
|
662 |
if i < len(args) and args[i].isdigit(): |
if i < len(args) and args[i].isdigit(): |
663 |
cantidad = int(args[i]) |
cantidad = int(args[i]) |
664 |
i = i + 1 |
i = i + 1 |
688 |
else: |
else: |
689 |
ok = 1 |
ok = 1 |
690 |
|
|
691 |
return (id_objeto, cantidad, n_orden, n_instancia, ok) |
if comando == 'dar': |
692 |
|
return (id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok) |
693 |
|
else: |
694 |
|
return (id_objeto, cantidad, n_orden, n_instancia, ok) |
695 |
|
|
696 |
|
|
697 |
# --------------------- |
# --------------------- |
774 |
self.conn().send(color(31) + ' +[d]ejar [<cantidad>] <id_objeto> [ <n_orden> [<n_unidad>] ]' + finl) |
self.conn().send(color(31) + ' +[d]ejar [<cantidad>] <id_objeto> [ <n_orden> [<n_unidad>] ]' + finl) |
775 |
self.conn().send("Esconder un objeto de la mochila en la sala:") |
self.conn().send("Esconder un objeto de la mochila en la sala:") |
776 |
self.conn().send(color(31) + ' +[esc]onder [<cantidad>] <id_objeto> [ <n_orden> [<n_unidad>] ]' + finl) |
self.conn().send(color(31) + ' +[esc]onder [<cantidad>] <id_objeto> [ <n_orden> [<n_unidad>] ]' + finl) |
777 |
|
|
778 |
|
self.conn().send("Dar un objeto a alguien en la sala:") |
779 |
|
self.conn().send(color(31) + ' +dar <nombre> [<cantidad>] <id_objeto> [ <n_orden> [<n_unidad>] ]' + finl) |
780 |
|
|
781 |
self.conn().send("Mirar el contenido de la mochila:") |
self.conn().send("Mirar el contenido de la mochila:") |
782 |
self.conn().send(color(31) + ' +[mo]chila' + finl) |
self.conn().send(color(31) + ' +[mo]chila' + finl) |
831 |
|
|
832 |
self.conn().send("Observar a un personaje: " + |
self.conn().send("Observar a un personaje: " + |
833 |
color(31) + '+[ob]servar <personaje>' +finl) |
color(31) + '+[ob]servar <personaje>' +finl) |
834 |
|
|
835 |
|
self.conn().send("Confiar en un personaje (necesario para recibir objetos): " + |
836 |
|
color(31) + '+confiar <personaje>' +finl) |
837 |
|
|
838 |
|
self.conn().send("Dejar de confiar en un personaje (rechazas propuestas personales): " + |
839 |
|
color(31) + '+noconfiar <personaje>' +finl) |
840 |
|
|
841 |
|
self.conn().send("Listas personas de confianza: " + |
842 |
|
color(31) + '+amigos' +finl) |
843 |
|
|
844 |
self.conn().send("Limitar el texto recibido sí/no: " + |
self.conn().send("Limitar el texto recibido sí/no: " + |
845 |
color(31) + '+silencio' + finl) |
color(31) + '+silencio' + finl) |
846 |
|
|
1045 |
if id_lider != None: |
if id_lider != None: |
1046 |
self.conn().send('Ya no estas siguiendo a ' + id_lider) |
self.conn().send('Ya no estas siguiendo a ' + id_lider) |
1047 |
|
|
1048 |
|
def cmd_amigos(self, id_amigo): |
1049 |
|
self.__personaje.ids_amigos.append(id_amigo) |
1050 |
|
self.conn().send("Has añadido a "+id_amigo+" a tu lista de personas de confianza.") |
1051 |
|
|
1052 |
|
def cmd_listar_amigos(self): |
1053 |
|
self.conn().send("-> Lista de personas de confianza <-") |
1054 |
|
self.conn().send('') |
1055 |
|
for key in self.__personaje.ids_amigos.keys(): |
1056 |
|
if self.__personaje.ids_amigos[key] > 0: |
1057 |
|
self.conn().send(self.__personaje.color_texto() + '\t'+ key + finl) |
1058 |
|
|
1059 |
def cmd_silencio(self): |
def cmd_silencio(self): |
1060 |
if self.__personaje.silencio == 'no': |
if self.__personaje.silencio == 'no': |
1061 |
self.__personaje.silencio = 'sí' |
self.__personaje.silencio = 'sí' |
1374 |
self.conn().send("No tienes en la mochila suficientes objetos con identificativo " + |
self.conn().send("No tienes en la mochila suficientes objetos con identificativo " + |
1375 |
id_objeto + ", solo tienes " + str(encontrados)) |
id_objeto + ", solo tienes " + str(encontrados)) |
1376 |
|
|
1377 |
|
|
1378 |
|
def cmd_dar(self, id_receptor, id_objeto, cantidad, n_orden, n_instancia): |
1379 |
|
encontrados = 0 |
1380 |
|
n_objeto = -1 |
1381 |
|
|
1382 |
|
# Buscar el id_receptor en la sala actual. |
1383 |
|
if self.__personaje.sala != None: |
1384 |
|
receptor_encontrado = 0 |
1385 |
|
for personaje in self.__personaje.sala.personajes.values(): |
1386 |
|
if personaje !=self.__personaje and personaje.controlador != None and string.lower(personaje.id) == string.lower(id_receptor): |
1387 |
|
receptor_encontrado = 1 |
1388 |
|
receptor = personaje |
1389 |
|
break |
1390 |
|
if receptor_encontrado == 0: |
1391 |
|
self.conn().send('No hay nadie aquí que se llame '+id_receptor) |
1392 |
|
return |
1393 |
|
|
1394 |
|
# Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo, |
1395 |
|
# discriminamos con el parametro n_orden. |
1396 |
|
for instancias in self.__personaje.mochila(): |
1397 |
|
n_objeto = n_objeto + 1 |
1398 |
|
if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre()): |
1399 |
|
encontrados = encontrados + 1 |
1400 |
|
if encontrados == n_orden: |
1401 |
|
|
1402 |
|
# Hemos encontrado el objeto, ahora vemos si hay instancias |
1403 |
|
# suficientes. |
1404 |
|
if (n_instancia + cantidad - 1) > len(instancias): |
1405 |
|
self.conn().send("No tienes " + str(n_instancia + cantidad - 1) + |
1406 |
|
" unidades de ese objeto en la mochila, solo tienes " + |
1407 |
|
str(len(instancias))) |
1408 |
|
else: |
1409 |
|
#Comprobar antes de seguir que el personaje que da el objeto se encuentra |
1410 |
|
#en la lista de confianza del receptor (salvo que el que da sea un Maia...) |
1411 |
|
|
1412 |
|
if self.__personaje.esMaia(): |
1413 |
|
pass |
1414 |
|
|
1415 |
|
else: |
1416 |
|
try: |
1417 |
|
confianza = receptor.ids_amigos[self.__personaje.id] |
1418 |
|
if confianza < 1: |
1419 |
|
raise KeyError |
1420 |
|
except KeyError, e: |
1421 |
|
self.conn().send(receptor.nombre + " no acepta tu objeto.\n",0) |
1422 |
|
self.__personaje.comunicar_evento(receptor, "te ha intentado dar " + id_objeto + " pero te has negado.") |
1423 |
|
break |
1424 |
|
|
1425 |
|
# Todo ok: sacamos las instancias de la mochila |
1426 |
|
for i in range(0, cantidad): |
1427 |
|
instancia = self.__personaje.sacar_de_mochila(n_objeto, |
1428 |
|
n_instancia - 1) |
1429 |
|
self.__personaje.dar_objeto(instancia, receptor) |
1430 |
|
|
1431 |
|
#mensajes |
1432 |
|
self.__personaje.actuar("ha dado " + instancia.nombre() + " a " + receptor.nombre) |
1433 |
|
self.conn().send("Has dado " + instancia.nombre() + " a " + receptor.nombre, 0) |
1434 |
|
self.__personaje.comunicar_evento(receptor, "te ha dado " + instancia.nombre()) |
1435 |
|
if cantidad > 1: |
1436 |
|
self.conn().send(" (" + str(cantidad) + " unidades)") |
1437 |
|
self.__personaje.comunicar_evento(receptor, " (" + str(cantidad) + " unidades)", 0) |
1438 |
|
else: |
1439 |
|
self.conn().send("") |
1440 |
|
|
1441 |
|
break |
1442 |
|
|
1443 |
|
if encontrados == 0: |
1444 |
|
self.conn().send("No tienes en la mochila ningún objeto con identificativo " + |
1445 |
|
id_objeto) |
1446 |
|
elif encontrados < n_orden: |
1447 |
|
self.conn().send("No tienes en la mochila suficientes objetos con identificativo " + |
1448 |
|
id_objeto + ", solo tienes " + str(encontrados)) |
1449 |
|
|
1450 |
|
|
1451 |
#%% def cmd_dejar(self, nombre_objeto, cantidad, accion = "dejado",dif=0): |
#%% def cmd_dejar(self, nombre_objeto, cantidad, accion = "dejado",dif=0): |
1452 |
#%% fallos = 0 |
#%% fallos = 0 |
1453 |
#%% for i in range(cantidad): |
#%% for i in range(cantidad): |