/[ambar]/ambar/dialogonormal.py
ViewVC logotype

Diff of /ambar/dialogonormal.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.2 by amoyav, Fri Aug 23 13:42:20 2002 UTC revision 2.3 by pabloruiz, Mon Aug 26 18:59:53 2002 UTC
# Line 47  class DialogoNormal(Dialogo): Line 47  class DialogoNormal(Dialogo):
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    
# Line 159  class DialogoNormal(Dialogo): Line 160  class DialogoNormal(Dialogo):
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.
# Line 478  class DialogoNormal(Dialogo): Line 488  class DialogoNormal(Dialogo):
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) = \
# Line 612  class DialogoNormal(Dialogo): Line 640  class DialogoNormal(Dialogo):
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
# Line 653  class DialogoNormal(Dialogo): Line 688  class DialogoNormal(Dialogo):
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      # ---------------------      # ---------------------
# Line 736  class DialogoNormal(Dialogo): Line 774  class DialogoNormal(Dialogo):
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)
# Line 790  class DialogoNormal(Dialogo): Line 831  class DialogoNormal(Dialogo):
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    
# Line 995  class DialogoNormal(Dialogo): Line 1045  class DialogoNormal(Dialogo):
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í'
# Line 1314  class DialogoNormal(Dialogo): Line 1374  class DialogoNormal(Dialogo):
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):

Legend:
Removed from v.2.2  
changed lines
  Added in v.2.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26