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

Diff of /ambar/dialogonormal.py

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

revision 2.27 by amoyav, Sun Aug 31 20:43:27 2003 UTC revision 2.28 by TuringTest, Fri Sep 5 21:26:01 2003 UTC
# Line 45  class DialogoNormal(Dialogo): Line 45  class DialogoNormal(Dialogo):
45    
46      COMANDOS_POSIBLES = ['+salir','+doc','+ip','+seguir','+noseguir','+hablar','+hablarq','+hablaro',      COMANDOS_POSIBLES = ['+salir','+doc','+ip','+seguir','+noseguir','+hablar','+hablarq','+hablaro',
47                           '+hablare', '+susurrar','+susurrarq','+susurrare','+susurraro','+gritar',                           '+hablare', '+susurrar','+susurrarq','+susurrare','+susurraro','+gritar',
48                           '+gritarq','+gritare','+gritaro','+idioma','+actuar','+decir','+preguntar',                           '+gritarq','+gritare','+gritaro','+idioma','+actuar','+decir','+preguntar',
49                           '+atacar','+coger','+dejar','+esconder','+mochila','+examinar','+usar',                           '+atacar','+coger','+dejar','+esconder','+mochila','+examinar','+usar',
50                           '+comer','+beber','+estadisticas','+mirar','+mr','+area','+observar',                           '+comer','+beber','+estadisticas','+mirar','+mr','+area','+observar',
51                           '+silencio','+confiar','+noconfiar','+dar','+amigos','+recapitular','+reloj',                           '+silencio','+confiar','+noconfiar','+dar','+amigos','+recapitular','+reloj',
52                           '+poner','+quitar']                           '+poner','+quitar']
53    
54      COMANDOS_MAIAR =  ['+entorno','+ent','+listar','+localizar','+loc']      COMANDOS_MAIAR =  ['+entorno','+ent','+listar','+localizar','+loc']
55    
# Line 57  class DialogoNormal(Dialogo): Line 57  class DialogoNormal(Dialogo):
57                              '+suroeste', '+oeste', '+noroeste', '+arriba', '+abajo']                              '+suroeste', '+oeste', '+noroeste', '+arriba', '+abajo']
58    
59      COMANDOS_ABREV_DIR = {'+n':'+norte',   '+ne':'+noreste',   '+e':'+este',  '+se':'+sureste',      COMANDOS_ABREV_DIR = {'+n':'+norte',   '+ne':'+noreste',   '+e':'+este',  '+se':'+sureste',
60                            '+s':'+sur',     '+so': '+suroeste', '+o':'+oeste', '+no':'+noroeste',                            '+s':'+sur',     '+so': '+suroeste', '+o':'+oeste', '+no':'+noroeste',
61                            '+ar':'+arriba', '+ab':'+abajo'}                            '+ar':'+arriba', '+ab':'+abajo'}
62    
63    
64      def __init__(self, padre, conn, personaje):      def __init__(self, padre, conn, personaje):
65          Dialogo.__init__(self, padre, conn)          Dialogo.__init__(self, padre, conn)
66          self.__personaje = personaje          self.__personaje = personaje
67            self.__inactivo = 0
68    
69          self.lanzar_tirada_percep_sala()          self.lanzar_tirada_percep_sala()
70            
71          self.cmd_estadisticas()          self.cmd_estadisticas()
72    
73          self.conn().send('La apariencia de tu personaje es:')          self.conn().send('La apariencia de tu personaje es:')
74          for item in self.__personaje.descripcion:          for item in self.__personaje.descripcion:
75              self.conn().send(color(31) + item["texto"] + "\n" + finl)              self.conn().send(color(31) + item["texto"] + "\n" + finl)
76    
77          self.cmd_mirar()          self.cmd_mirar()
78    
79          self.conn().send("IMPORTANTE: los comandos se escriben empezando con el carácter +.")          self.conn().send("IMPORTANTE: los comandos se escriben empezando con el carácter +.")
80          self.conn().send("Escribe +? para leer la ayuda.")          self.conn().send("Escribe +? para leer la ayuda.")
81          self.conn().send("Para hablar, simplemente escribe algo sin + delante.")          self.conn().send("Para hablar, simplemente escribe algo sin + delante.")
82          self.conn().send('')          self.conn().send('')
83          if self.__personaje.es_maia: self.conn().send("Eres un Maia de Minë.")          if self.__personaje.es_maia: self.conn().send("Eres un Maia de Minë.")
84          self.conn().send('')          self.conn().send('')
# Line 95  class DialogoNormal(Dialogo): Line 96  class DialogoNormal(Dialogo):
96      # -------------------------------------------      # -------------------------------------------
97    
98      def entra_personaje(self, personaje):      def entra_personaje(self, personaje):
99          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
100              if isinstance(personaje, PersonajeJugador):              if isinstance(personaje, PersonajeJugador):
101                  self.conn().send(color(35) + personaje.id + " ha entrado" + finl)                  self.conn().send(color(35) + personaje.id + " ha entrado" + finl)
102              else:              else:
103                  self.conn().send(color(35) + personaje.nombre + " ha entrado" + finl)                  self.conn().send(color(35) + personaje.nombre + " ha entrado" + finl)
104                                                    
105                                                    
106      def sale_personaje(self, personaje, nombre_sala_destino):      def sale_personaje(self, personaje, nombre_sala_destino):
107          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
108              if isinstance(personaje, PersonajeJugador):              if isinstance(personaje, PersonajeJugador):
109                  self.conn().send(color(35) + personaje.id + " se va hacia " +                  self.conn().send(color(35) + personaje.id + " se va hacia " +
110                                   nombre_sala_destino + finl)                                   nombre_sala_destino + finl)
111              else:              else:
112                  self.conn().send(color(35) + personaje.nombre + " se va hacia " +                  self.conn().send(color(35) + personaje.nombre + " se va hacia " +
113                                   nombre_sala_destino + finl)                                   nombre_sala_destino + finl)
114                                                    
115                                                    
116      def habla_personaje(self, personaje, mensaje):      def habla_personaje(self, personaje, mensaje):
117          if isinstance(personaje, PersonajeJugador):          if isinstance(personaje, PersonajeJugador):
118              self.conn().send("\n"+ personaje.id + " dice: " + personaje.color_texto() + mensaje +'  ' + finl)              self.conn().send("\n"+ personaje.id + " dice: " + personaje.color_texto() + mensaje +'  ' + finl)
119          else:          else:
120              self.conn().send("\n"+ personaje.nombre + " dice: " + personaje.color_texto() + mensaje +'  ' + finl)              self.conn().send("\n"+ personaje.nombre + " dice: " + personaje.color_texto() + mensaje +'  ' + finl)
121    
122                    
123      def susurra_personaje(self, personaje, mensaje):      def susurra_personaje(self, personaje, mensaje):
124          if isinstance(personaje, PersonajeJugador):          if isinstance(personaje, PersonajeJugador):
125              self.conn().send(personaje.id + " susurra: " + personaje.color_texto()  + mensaje + finl)              self.conn().send(personaje.id + " susurra: " + personaje.color_texto()  + mensaje + finl)
126          else:          else:
127              self.conn().send(personaje.nombre + " susurra: " + personaje.color_texto()  + mensaje + finl)              self.conn().send(personaje.nombre + " susurra: " + personaje.color_texto()  + mensaje + finl)
128    
129                    
130      def grita_personaje(self, personaje, mensaje):      def grita_personaje(self, personaje, mensaje):
131          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
132              if isinstance(personaje, PersonajeJugador):              if isinstance(personaje, PersonajeJugador):
133                  self.conn().send("\n" + color(35) + personaje.id + " grita: " + personaje.color_texto()  + mensaje + finl)                  self.conn().send("\n" + color(35) + personaje.id + " grita: " + personaje.color_texto()  + mensaje + finl)
134              else:              else:
135                  self.conn().send("\n" + color(35) + personaje.nombre + " grita: " + personaje.color_texto()  + mensaje + finl)                  self.conn().send("\n" + color(35) + personaje.nombre + " grita: " + personaje.color_texto()  + mensaje + finl)
136    
137    
138      def actua_personaje(self, personaje, accion):      def actua_personaje(self, personaje, accion):
139          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
140              if isinstance(personaje, PersonajeJugador):              if isinstance(personaje, PersonajeJugador):
141                  self.conn().send(personaje.id +  " " + accion)                  self.conn().send(personaje.id +  " " + accion)
142              else:              else:
143                  self.conn().send(personaje.nombre +  " " + accion)                  self.conn().send(personaje.nombre +  " " + accion)
144    
145    
146      def actua_individual_personaje(self, personaje, accion):      def actua_individual_personaje(self, personaje, accion):
147          if isinstance(personaje, PersonajeJugador):          if isinstance(personaje, PersonajeJugador):
148              self.conn().send(personaje.color_texto() + personaje.id + ' ' + accion + finl)              self.conn().send(personaje.color_texto() + personaje.id + ' ' + accion + finl)
149          else:          else:
150              self.conn().send(personaje.color_texto() + personaje.nombre + ' ' + accion + finl)              self.conn().send(personaje.color_texto() + personaje.nombre + ' ' + accion + finl)
151    
152            
153      def actua_uno_mismo(self, accion):      def actua_uno_mismo(self, accion):
154          self.conn().send(accion)          self.conn().send(accion)
155                                                
156                                                    
157      def actua_global_personaje(self, personaje, accion):      def actua_global_personaje(self, personaje, accion):
158          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
159              if isinstance(personaje, PersonajeJugador):              if isinstance(personaje, PersonajeJugador):
160                  self.conn().send(color(35) + personaje.id + " " + accion + finl)                  self.conn().send(color(35) + personaje.id + " " + accion + finl)
161              else:              else:
162                  self.conn().send(color(35) + personaje.nombre + " " + accion + finl)                  self.conn().send(color(35) + personaje.nombre + " " + accion + finl)
163                                                    
164                                                    
165      def suceso_entorno(self, suceso):      def suceso_entorno(self, suceso):
166          if self.__personaje.silencio == "no":          if self.__personaje.silencio == "no":
167              self.conn().send('...'+ suceso + '...')              self.conn().send('...'+ suceso + '...')
168                    
169            
170      def ataca_personaje(self, personaje, result):      def ataca_personaje(self, personaje, result):
# Line 180  class DialogoNormal(Dialogo): Line 181  class DialogoNormal(Dialogo):
181    
182    
183      def movimiento_automatico(self):      def movimiento_automatico(self):
184          self.conn().send("Te mueves siguiendo a " + self.__personaje.anterior.id)          self.conn().send("Te mueves siguiendo a " + self.__personaje.anterior.id)
185          self.lanzar_tirada_percep_sala()          self.lanzar_tirada_percep_sala()
186          self.cmd_mirar()          self.cmd_mirar()
187    
188          if self.__personaje.salas_visitadas.get(self.__personaje.sala.id) != 'si':          if self.__personaje.salas_visitadas.get(self.__personaje.sala.id) != 'si':
189              self.conn().send("Es la primera vez que estás aquí...")              self.conn().send("Es la primera vez que estás aquí...")
190              self.__personaje.salas_visitadas.update({self.__personaje.sala.id:'si'})              self.__personaje.salas_visitadas.update({self.__personaje.sala.id:'si'})
191              #Ganamos un punto de experiencia (hay que premiar la exploración)              #Ganamos un punto de experiencia (hay que premiar la exploración)
192              self.__personaje.experiencia = self.__personaje.experiencia + 1              self.__personaje.experiencia = self.__personaje.experiencia + 1
193    
# Line 208  class DialogoNormal(Dialogo): Line 209  class DialogoNormal(Dialogo):
209          if len(cmd_list) == 0:          if len(cmd_list) == 0:
210              accion = ''              accion = ''
211              args = []              args = []
212              self.ejecutar(accion, args)              self.ejecutar(accion, args)
213          else:          else:
214              acciones_temp = ' '.join(cmd_list)              acciones_temp = ' '.join(cmd_list)
215              acciones = acciones_temp.split('&&')[:]              acciones = acciones_temp.split('&&')[:]
216              for una_accion in acciones:              for una_accion in acciones:
217                  una_accion = una_accion.split()                  una_accion = una_accion.split()
218                  accion = una_accion[0]                  accion = una_accion[0]
219                  try:                  try:
220                      args = una_accion[1:]                      args = una_accion[1:]
221                  except:                  except:
222                      args = []                      args = []
223                                    
224                  self.ejecutar(accion, args)                  self.ejecutar(accion, args)
225    
226    
227      def tick_0(self, tick_ahora, tick_anterior):      def tick_0(self, tick_ahora, tick_anterior):
228          """Durante el dialogo normal, los ticks del reloj se usan para ir 'cantando'          """Durante el dialogo normal, los ticks del reloj se usan para ir 'cantando'
229          el tiempo, como los serenos.          el tiempo, como los serenos.
230          """          """
231          if tick_ahora.hora() != tick_anterior.hora():          if tick_ahora.hora() != tick_anterior.hora():
232              self.conn().send(color(35) + "El tiempo pasa. Son las %d horas (%s)." %              self.conn().send(color(35) + "El tiempo pasa. Son las %d horas (%s)." %
233                                           (tick_ahora.hora(), tick_ahora.desc_seccion()) + finl)                                           (tick_ahora.hora(), tick_ahora.desc_seccion()) + finl)
234                # Desconexión automática si el jugador está una hora de juego sin hacer nada
235                # Para evitar que el personaje muera de hambre si la conexión se queda abierta
236                if self.__inactivo:
237                    self.conn().send("Llevas más de una hora de juego sin actividad.")
238                    self.conn().send("Has sido desconectado automáticamente para garantizar la seguridad de tu personaje.")
239                    self.conn().send("Puedes volver a conectarte en cualquier momento.")
240                    self.estado_1()
241                self.__inactivo = 1
242                            
243                            
244      def ataque_normal_0(self, personaje, result):      def ataque_normal_0(self, personaje, result):
# Line 264  class DialogoNormal(Dialogo): Line 273  class DialogoNormal(Dialogo):
273          #la orden dada.          #la orden dada.
274          comando_dado = ' '.join([self.__personaje.nombre+' ejecuta: ',accion,' '.join(args)])          comando_dado = ' '.join([self.__personaje.nombre+' ejecuta: ',accion,' '.join(args)])
275          escribir(comando_dado)          escribir(comando_dado)
276            self.__inactivo = 0
277    
278          try:          try:
279    
280              # Primero se ve si el comando es en realidad una de las              # Primero se ve si el comando es en realidad una de las
281              # posibles direcciones.  Notar que la direccion "otro" no aparece en              # posibles direcciones.  Notar que la direccion "otro" no aparece en
282              # esta lista (si alguna sala tiene una  salida en esta direccion, hay              # esta lista (si alguna sala tiene una  salida en esta direccion, hay
283              # que usar el id de la salida para moverse a ella).              # que usar el id de la salida para moverse a ella).
284                            
285              es_salida = 0              es_salida = 0
286    
287                if accion in DialogoNormal.COMANDOS_DIRECCIONES:
288                    es_salida = 1
289                    direccion = accion[1:]
290                elif accion in DialogoNormal.COMANDOS_ABREV_DIR.keys():
291                    es_salida = 1
292                    direccion = DialogoNormal.COMANDOS_ABREV_DIR[accion][1:]
293    
294                if es_salida == 1:
295                    encontrado = 0
296    
297                    for salida in self.__personaje.sala.salidas:
298                        if direccion == salida["direccion"] and \
299                            self.__personaje.resultado_tirada("percepcion_sala", salida["dificultad"]) > 0:
300                            encontrado = 1
301                            self.cmd_mover(salida["id"])
302                            #En cuanto hayamos encontrado una sala que esté en esa dirección
303                            #nos vamos a ella. De otra forma, Minë te presenta todas, una por una
304                            #y te deja en la última del búcle
305                            break
306                            
307                    if encontrado == 0:
308                        self.conn().send("No puedes ir por ahi.")
309    
310                    self.estado_0()
311    
312                # Si no, ver si es el id de una de las salidas.
313                if es_salida == 0:
314                    for salida in self.__personaje.sala.salidas:
315                        if normalizar_id(accion[1:]) == extraer_id(salida["descripcion"]) and \
316                          self.__personaje.resultado_tirada("percepcion_sala", salida["dificultad"]) > 0:
317                            es_salida = 1
318                            self.cmd_mover(salida["id"])
319                            self.estado_0()
320    
321              if accion in DialogoNormal.COMANDOS_DIRECCIONES:              # Si no, ver si es un comando. En ese caso, llamar a la función
322                  es_salida = 1              # especializada en ejecutar cada comando.
323                  direccion = accion[1:]              if es_salida == 0:
324              elif accion in DialogoNormal.COMANDOS_ABREV_DIR.keys():  
325                  es_salida = 1                  #Comprobamos que un jugador normal no intenta ejecutar una acción de Maia
326                  direccion = DialogoNormal.COMANDOS_ABREV_DIR[accion][1:]                  if accion in DialogoNormal.COMANDOS_MAIAR and self.__personaje.es_maia == 0:
327                        self.conn().send("Error, comando no reconocido. Escribe '+?' y pulsa ENTER")
328              if es_salida == 1:                      self.conn().send("para una lista de comandos.")
329                  encontrado = 0                      self.estado_0()
330    
331                  for salida in self.__personaje.sala.salidas:                  #Miramos cada acción por separado.
332                      if direccion == salida["direccion"] and \                  
333                         self.__personaje.resultado_tirada("percepcion_sala", salida["dificultad"]) > 0:                  elif accion == "+decir":
334                          encontrado = 1                      self.cmd_hablar_pnj("decir", args)
335                          self.cmd_mover(salida["id"])                      self.estado_0()
336                          #En cuanto hayamos encontrado una sala que esté en esa dirección                      
337                          #nos vamos a ella. De otra forma, Minë te presenta todas, una por una                  elif accion == "+preguntar" or accion == "+p":
338                          #y te deja en la última del búcle                      self.cmd_hablar_pnj("preguntar", args)
339                          break                      self.estado_0()
340                                                
341                  if encontrado == 0:                  elif accion == "+recapitular" or accion == "+recap":
342                      self.conn().send("No puedes ir por ahi.")                      self.cmd_recapitular(args)
343                        self.estado_0()
344                  self.estado_0()                      
345                    elif accion == "+creditos":
346              # Si no, ver si es el id de una de las salidas.                      for linea in creditos.splitlines():
347              if es_salida == 0:                          self.conn().send(linea)
348                  for salida in self.__personaje.sala.salidas:                      self.estado_0()
349                      if normalizar_id(accion[1:]) == extraer_id(salida["descripcion"]) and \  
350                         self.__personaje.resultado_tirada("percepcion_sala", salida["dificultad"]) > 0:                  elif accion == "+sus" or accion == "+susurrar":
351                          es_salida = 1                      try:
352                          self.cmd_mover(salida["id"])                          oyente = args[0]
353                          self.estado_0()                          mensaje = " ".join(args[1:])
354                            self.cmd_susurrar(oyente, mensaje, idioma=self.__personaje.idioma_base)
355              # Si no, ver si es un comando. En ese caso, llamar a la función                      except:
356              # especializada en ejecutar cada comando.                          self.conn().send('Tienes que decir algo a alguien')
357              if es_salida == 0:                          self.estado_0()
358                        self.estado_0()
359                  #Comprobamos que un jugador normal no intenta ejecutar una acción de Maia  
360                  if accion in DialogoNormal.COMANDOS_MAIAR and self.__personaje.es_maia == 0:                  elif accion == "+susq" or accion == "+susurrarq":
361                      self.conn().send("Error, comando no reconocido. Escribe '+?' y pulsa ENTER")                      try:
362                      self.conn().send("para una lista de comandos.")                          oyente = args[0]
363                      self.estado_0()                          mensaje = " ".join(args[1:])
364                            self.cmd_susurrar(oyente, mensaje, idioma=Idioma_quenya)
365                  #Miramos cada acción por separado.                      except:
366                                            self.conn().send('Tienes que decir algo a alguien')
367                  elif accion == "+decir":                          self.estado_0()
368                      self.cmd_hablar_pnj("decir", args)                      self.estado_0()
369                      self.estado_0()  
370                                        elif accion == "+suse" or accion == "+susurrare":
371                  elif accion == "+preguntar" or accion == "+p":                      try:
372                      self.cmd_hablar_pnj("preguntar", args)                          oyente = args[0]
373                      self.estado_0()                          mensaje = " ".join(args[1:])
374                                                self.cmd_susurrar(oyente, mensaje, idioma=Idioma_enano)
375                  elif accion == "+recapitular" or accion == "+recap":                      except:
376                      self.cmd_recapitular(args)                          self.conn().send('Tienes que decir algo a alguien')
377                      self.estado_0()                          self.estado_0()
378                                            self.estado_0()
379                  elif accion == "+creditos":  
380                      for linea in creditos.splitlines():                  elif accion == "+suso" or accion == "+susurraro":
381                          self.conn().send(linea)                      try:
382                      self.estado_0()                          oyente = args[0]
383                            mensaje = " ".join(args[1:])
384                  elif accion == "+sus" or accion == "+susurrar":                          self.cmd_susurrar(oyente, mensaje, idioma=Idioma_orco)
385                      try:                      except:
386                          oyente = args[0]                          self.conn().send('Tienes que decir algo a alguien')
387                          mensaje = " ".join(args[1:])                          self.estado_0()
388                          self.cmd_susurrar(oyente, mensaje, idioma=self.__personaje.idioma_base)                      self.estado_0()
389                      except:  
390                          self.conn().send('Tienes que decir algo a alguien')                  elif accion == "+h" or accion == "+hablar":
391                          self.estado_0()                      mensaje = " ".join(args)
392                      self.estado_0()                      self.cmd_hablar(mensaje, idioma=Idioma_oestron)
393                        self.estado_0()
394                  elif accion == "+susq" or accion == "+susurrarq":                      
395                      try:                  elif accion == "+hq" or accion == "+hablarq":
396                          oyente = args[0]                      mensaje = " ".join(args)
397                          mensaje = " ".join(args[1:])                      self.cmd_hablar(mensaje, idioma=Idioma_quenya)
398                          self.cmd_susurrar(oyente, mensaje, idioma=Idioma_quenya)                      self.estado_0()
399                      except:  
400                          self.conn().send('Tienes que decir algo a alguien')                  elif accion == "+he" or accion == "+hablare":
401                          self.estado_0()                      mensaje = " ".join(args)
402                      self.estado_0()                      self.cmd_hablar(mensaje, idioma=Idioma_enano)
403                        self.estado_0()
404                  elif accion == "+suse" or accion == "+susurrare":  
405                      try:                  elif accion == "+ho" or accion == "+hablaro":
406                          oyente = args[0]                      mensaje = " ".join(args)
407                          mensaje = " ".join(args[1:])                      self.cmd_hablar(mensaje, idioma=Idioma_orco)
408                          self.cmd_susurrar(oyente, mensaje, idioma=Idioma_enano)                      self.estado_0()
409                      except:  
410                          self.conn().send('Tienes que decir algo a alguien')                  elif accion == "+g" or accion == "+gritar":
411                          self.estado_0()                      mensaje = " ".join(args)
412                      self.estado_0()                      self.cmd_gritar(mensaje)
413                        self.estado_0()
414                  elif accion == "+suso" or accion == "+susurraro":                      
415                      try:                  elif accion == "+gq" or accion == "+gritarq":
416                          oyente = args[0]                      mensaje = " ".join(args)
417                          mensaje = " ".join(args[1:])                      self.cmd_gritar(mensaje, idioma=Idioma_quenya)
418                          self.cmd_susurrar(oyente, mensaje, idioma=Idioma_orco)                      self.estado_0()
419                      except:  
420                          self.conn().send('Tienes que decir algo a alguien')                  elif accion == "+ge" or accion == "+gritare":
421                          self.estado_0()                      mensaje = " ".join(args)
422                      self.estado_0()                      self.cmd_gritar(mensaje, idioma=Idioma_enano)
423                        self.estado_0()
424                  elif accion == "+h" or accion == "+hablar":  
425                      mensaje = " ".join(args)                  elif accion == "+go" or accion == "+gritaro":
426                      self.cmd_hablar(mensaje, idioma=Idioma_oestron)                      mensaje = " ".join(args)
427                      self.estado_0()                      self.cmd_gritar(mensaje, idioma=Idioma_orco)
428                                            self.estado_0()
429                  elif accion == "+hq" or accion == "+hablarq":  
430                      mensaje = " ".join(args)                  elif accion == "+est" or accion == "+estadisticas":
431                      self.cmd_hablar(mensaje, idioma=Idioma_quenya)                      self.cmd_estadisticas()
432                      self.estado_0()                      self.estado_0()
433    
434                  elif accion == "+he" or accion == "+hablare":                  elif accion == "+m" or accion == "+mirar":
435                      mensaje = " ".join(args)                      self.cmd_mirar()
436                      self.cmd_hablar(mensaje, idioma=Idioma_enano)                      self.estado_0()
437                      self.estado_0()  
438                    elif accion == "+mr":
439                  elif accion == "+ho" or accion == "+hablaro":                      self.cmd_mirar(resumen=1)
440                      mensaje = " ".join(args)                      self.estado_0()
441                      self.cmd_hablar(mensaje, idioma=Idioma_orco)  
442                      self.estado_0()                  elif accion == "+mochila" or accion == "+mo":
443                        self.cmd_mochila()
444                  elif accion == "+g" or accion == "+gritar":                      self.estado_0()
445                      mensaje = " ".join(args)  
446                      self.cmd_gritar(mensaje)                  elif accion == "+silencio":
447                      self.estado_0()                      self.cmd_silencio()
448                                            self.estado_0()
449                  elif accion == "+gq" or accion == "+gritarq":                      
450                      mensaje = " ".join(args)                  elif accion == "+idioma":
451                      self.cmd_gritar(mensaje, idioma=Idioma_quenya)                      nombre_idioma_base = (len(args) > 0 and args[0]) or ""
452                      self.estado_0()                      self.cmd_idioma(nombre_idioma_base)
453                        self.estado_0()
454                  elif accion == "+ge" or accion == "+gritare":                      
455                      mensaje = " ".join(args)                  elif accion == "+c" or accion == "+coger":
456                      self.cmd_gritar(mensaje, idioma=Idioma_enano)                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
457                      self.estado_0()                          self.parsear_ident_objeto(args, "coger")
458                        if ok:
459                  elif accion == "+go" or accion == "+gritaro":                          self.cmd_coger(id_objeto, cantidad, n_orden, n_instancia)
460                      mensaje = " ".join(args)                      self.estado_0()
                     self.cmd_gritar(mensaje, idioma=Idioma_orco)  
                     self.estado_0()  
   
                 elif accion == "+est" or accion == "+estadisticas":  
                     self.cmd_estadisticas()  
                     self.estado_0()  
   
                 elif accion == "+m" or accion == "+mirar":  
                     self.cmd_mirar()  
                     self.estado_0()  
   
                 elif accion == "+mr":  
                     self.cmd_mirar(resumen=1)  
                     self.estado_0()  
   
                 elif accion == "+mochila" or accion == "+mo":  
                     self.cmd_mochila()  
                     self.estado_0()  
   
                 elif accion == "+silencio":  
                     self.cmd_silencio()  
                     self.estado_0()  
                       
                 elif accion == "+idioma":  
                     nombre_idioma_base = (len(args) > 0 and args[0]) or ""  
                     self.cmd_idioma(nombre_idioma_base)  
                     self.estado_0()  
                       
                 elif accion == "+c" or accion == "+coger":  
                     (id_objeto, cantidad, n_orden, n_instancia, ok) = \  
                         self.parsear_ident_objeto(args, "coger")  
                     if ok:  
                         self.cmd_coger(id_objeto, cantidad, n_orden, n_instancia)  
                     self.estado_0()  
                       
461      #%%                try:      #%%                try:
462      #%%                    nombre_objeto = (len(args) > 0 and args[0]) or ""      #%%                    nombre_objeto = (len(args) > 0 and args[0]) or ""
463      #%%                    cantidad = int((len(args) > 1 and args[1])) or 1      #%%                    cantidad = int((len(args) > 1 and args[1])) or 1
# Line 461  class DialogoNormal(Dialogo): Line 470  class DialogoNormal(Dialogo):
470      #%%                    self.conn().send('Ha ocurrido un error. Consulta la sintaxis del comando en la ayuda con +?')      #%%                    self.conn().send('Ha ocurrido un error. Consulta la sintaxis del comando en la ayuda con +?')
471      #%%                    self.estado_0()      #%%                    self.estado_0()
472    
473                  elif accion == "+d" or accion == "+dejar":                  elif accion == "+d" or accion == "+dejar":
474                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
475                          self.parsear_ident_objeto(args, "dejar")                          self.parsear_ident_objeto(args, "dejar")
476                      if ok:                      if ok:
477                          self.cmd_dejar(id_objeto, cantidad, n_orden, n_instancia)                          self.cmd_dejar(id_objeto, cantidad, n_orden, n_instancia)
478    
479                      self.estado_0()                      self.estado_0()
480                                                    
481                  elif accion == "+esc" or accion == "+esconder":                  elif accion == "+esc" or accion == "+esconder":
482                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
483                          self.parsear_ident_objeto(args, "esconder")                          self.parsear_ident_objeto(args, "esconder")
484                      if ok:                      if ok:
485                          dificultad = self.__personaje.generar_dificultad("inteligencia", 0)                          dificultad = self.__personaje.generar_dificultad("inteligencia", 0)
486                          self.cmd_dejar(id_objeto, cantidad, n_orden, n_instancia, dificultad)                          self.cmd_dejar(id_objeto, cantidad, n_orden, n_instancia, dificultad)
487    
488                      self.estado_0()                      self.estado_0()
489    
490      #%%                try:      #%%                try:
491      #%%                    nombre_objeto = (len(args) > 0 and args[0]) or ""      #%%                    nombre_objeto = (len(args) > 0 and args[0]) or ""
# Line 487  class DialogoNormal(Dialogo): Line 496  class DialogoNormal(Dialogo):
496      #%%                    self.conn().send('Ha ocurrido un error. Consulta la sintaxis del comando en la ayuda con +?')      #%%                    self.conn().send('Ha ocurrido un error. Consulta la sintaxis del comando en la ayuda con +?')
497      #%%                    self.estado_0()                      #%%                    self.estado_0()                
498    
499                  elif accion == "+dar":                  elif accion == "+dar":
500                      (id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok) = \
501                          self.parsear_ident_objeto(args, "dar")                          self.parsear_ident_objeto(args, "dar")
502                      if ok:                      if ok:
503                          self.cmd_dar(id_receptor, id_objeto, cantidad, n_orden, n_instancia)                          self.cmd_dar(id_receptor, id_objeto, cantidad, n_orden, n_instancia)
504    
505                      self.estado_0()                      self.estado_0()
506                                        
507                  elif accion == "+comer":                  elif accion == "+comer":
508                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
509                          self.parsear_ident_objeto(args, "comer")                          self.parsear_ident_objeto(args, "comer")
510                      if ok:                      if ok:
511                          if cantidad > 1:                          if cantidad > 1:
512                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")
513                          else:                          else:
514                              self.cmd_comer(id_objeto, n_orden, n_instancia)                              self.cmd_comer(id_objeto, n_orden, n_instancia)
515    
516                      self.estado_0()                      self.estado_0()
517                                        
518                  elif accion == "+beber":                  elif accion == "+beber":
519                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
520                          self.parsear_ident_objeto(args, "beber")                          self.parsear_ident_objeto(args, "beber")
521                      if ok:                      if ok:
522                          if cantidad > 1:                          if cantidad > 1:
523                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")
524                          else:                          else:
525                              self.cmd_beber(id_objeto, n_orden, n_instancia)                              self.cmd_beber(id_objeto, n_orden, n_instancia)
526    
527                      self.estado_0()                      self.estado_0()
528                                        
529                  elif accion == "+u" or accion == "+usar":                  elif accion == "+u" or accion == "+usar":
530                      (id_objeto, cantidad, n_orden, n_instancia, id_objeto2, n_orden2, \                      (id_objeto, cantidad, n_orden, n_instancia, id_objeto2, n_orden2, \
531                          n_instancia2, ok) = self.parsear_ident_objeto(args, "usar")                          n_instancia2, ok) = self.parsear_ident_objeto(args, "usar")
532                      if ok:                      if ok:
533                          if cantidad > 1:                          if cantidad > 1:
534                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")
535                          else:                          else:
536                              if id_objeto2 == "":                              if id_objeto2 == "":
537                                  self.cmd_usar(id_objeto, n_orden, n_instancia)                                  self.cmd_usar(id_objeto, n_orden, n_instancia)
538                              else:                              else:
539                                  self.cmd_usar_con(id_objeto, n_orden, n_instancia,                                  self.cmd_usar_con(id_objeto, n_orden, n_instancia,
540                                                    id_objeto2, n_orden2, n_instancia2)                                                    id_objeto2, n_orden2, n_instancia2)
541    
542                      self.estado_0()                      self.estado_0()
543    
544      #%%                nombre_objeto = (len(args) > 0 and args[0]) or ""      #%%                nombre_objeto = (len(args) > 0 and args[0]) or ""
545      #%%                self.cmd_usar(nombre_objeto)      #%%                self.cmd_usar(nombre_objeto)
546      #%%                self.estado_0()      #%%                self.estado_0()
547    
548                  elif accion == "+poner":                  elif accion == "+poner":
549                      if len(args) == 0:                      if len(args) == 0:
550                          self.conn().send("Debes indicar la posición y el objeto a ponerte, consulta la ayuda con +?")                          self.conn().send("Debes indicar la posición y el objeto a ponerte, consulta la ayuda con +?")
551                      else:                      else:
552                          posicion = args[0]                          posicion = args[0]
553                          if not posicion in Personaje.POSICIONES:                          if not posicion in Personaje.POSICIONES:
554                              self.conn().send("La posición no es válida, consulta la ayuda con +?")                              self.conn().send("La posición no es válida, consulta la ayuda con +?")
555                          else:                          else:
556                              (id_objeto, cantidad, n_orden, n_instancia, ok) = \                              (id_objeto, cantidad, n_orden, n_instancia, ok) = \
557                                  self.parsear_ident_objeto(args[1:], "poner")                                  self.parsear_ident_objeto(args[1:], "poner")
558                              if ok:                              if ok:
559                                  if cantidad > 1:                                  if cantidad > 1:
560                                      self.conn().send("El comando no es correcto, consulta la ayuda con +?")                                      self.conn().send("El comando no es correcto, consulta la ayuda con +?")
561                                  else:                                  else:
562                                      self.cmd_poner(posicion, id_objeto, n_orden, n_instancia)                                      self.cmd_poner(posicion, id_objeto, n_orden, n_instancia)
563    
564                      self.estado_0()                      self.estado_0()
565    
566                  elif accion == "+quitar":                  elif accion == "+quitar":
567                      if len(args) == 0:                      if len(args) == 0:
568                          self.conn().send("Debes indicar la posición, consulta la ayuda con +?")                          self.conn().send("Debes indicar la posición, consulta la ayuda con +?")
569                      else:                      else:
570                          posicion = args[0]                          posicion = args[0]
571                          if not posicion in Personaje.POSICIONES:                          if not posicion in Personaje.POSICIONES:
572                              self.conn().send("La posición no es válida, consulta la ayuda con +?")                              self.conn().send("La posición no es válida, consulta la ayuda con +?")
573                          else:                          else:
574                              self.cmd_quitar(posicion)                              self.cmd_quitar(posicion)
575    
576                      self.estado_0()                      self.estado_0()
577    
578                  elif accion == "+confiar":                  elif accion == "+confiar":
579                      id_personaje_de_confianza = args[0]                      id_personaje_de_confianza = args[0]
580                      self.__personaje.ids_amigos.update({id_personaje_de_confianza:1})                      self.__personaje.ids_amigos.update({id_personaje_de_confianza:1})
581                      self.conn().send("A partir de ahora confías en "+id_personaje_de_confianza)                      self.conn().send("A partir de ahora confías en "+id_personaje_de_confianza)
582    
583                      self.estado_0()                      self.estado_0()
584                                            
585                  elif accion == "+noconfiar":                  elif accion == "+noconfiar":
586                      id_personaje_de_no_confianza = args[0]                      id_personaje_de_no_confianza = args[0]
587                      self.__personaje.ids_amigos.update({id_personaje_de_no_confianza:0})                      self.__personaje.ids_amigos.update({id_personaje_de_no_confianza:0})
588                      self.conn().send("A partir de ahora no confías en "+id_personaje_de_no_confianza)                      self.conn().send("A partir de ahora no confías en "+id_personaje_de_no_confianza)
589    
590                      self.estado_0()                      self.estado_0()
591    
592                  elif accion == "+amigos":                  elif accion == "+amigos":
593                      self.cmd_listar_amigos()                      self.cmd_listar_amigos()
594                      self.estado_0()                      self.estado_0()
595    
596                  elif accion == "+ex" or accion == "+examinar":                  elif accion == "+ex" or accion == "+examinar":
597                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \                      (id_objeto, cantidad, n_orden, n_instancia, ok) = \
598                          self.parsear_ident_objeto(args, "examinar")                          self.parsear_ident_objeto(args, "examinar")
599                      if ok:                      if ok:
600                          if cantidad > 1:                          if cantidad > 1:
601                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")                              self.conn().send("El comando no es correcto, consulta la ayuda con +?")
602                          else:                          else:
603                              self.cmd_examinar(id_objeto, n_orden, n_instancia)                              self.cmd_examinar(id_objeto, n_orden, n_instancia)
604    
605                      self.estado_0()                      self.estado_0()
606    
607      #%%                nombre_objeto = (len(args) > 0 and args[0]) or ""      #%%                nombre_objeto = (len(args) > 0 and args[0]) or ""
608      #%%                posicion = int((len(args) > 1 and args[1])) or 1      #%%                posicion = int((len(args) > 1 and args[1])) or 1
# Line 601  class DialogoNormal(Dialogo): Line 610  class DialogoNormal(Dialogo):
610      #%%                self.cmd_examinar(nombre_objeto,posicion)      #%%                self.cmd_examinar(nombre_objeto,posicion)
611      #%%                self.estado_0()      #%%                self.estado_0()
612    
613                  elif accion == "+ob" or accion == "+observar":                  elif accion == "+ob" or accion == "+observar":
614                      nombre_oponente = (len(args) > 0 and args[0]) or ""                      nombre_oponente = (len(args) > 0 and args[0]) or ""
615                      self.cmd_observar(nombre_oponente)                      self.cmd_observar(nombre_oponente)
616                      self.estado_0()                      self.estado_0()
   
                 elif accion == "+a" or accion == "+atacar":  
                     self.conn().send("Comando deshabilitado temporalmente. Lo sentimos.")  
                     self.estado_0()  
   
                 elif accion == "+sal" or accion == "+salir" or accion == "/q" or accion == "+q":  
                     self.estado_1()  
   
                 elif accion == "+":  
                     self.estado_0()  
                       
                 elif accion == "+help" or accion == "+ayuda" or accion == "+?":  
                     self.cmd_ayuda(args)  
                     self.estado_0()  
   
                 elif accion == "+doc":  
                     self.cmd_doc(args)  
                     self.estado_0()  
   
                 elif accion == "+actuar" or accion == "+act":  
                     mensaje = " ".join(args)  
                     self.cmd_actuar(mensaje)  
                     self.estado_0()  
                       
                 elif accion == "+entorno" or accion == "+ent":  
                     mensaje = " ".join(args)  
                     self.cmd_entorno(mensaje)  
                     self.estado_0()  
                       
                 elif accion == "+listar":  
                     self.cmd_listar_personajes()  
                     self.estado_0()  
                       
                 elif accion == "+localizar" or accion == "+loc":  
                     try:  
                         self.cmd_localizar(args[0])  
                     except:  
                         self.conn().send('Tienes que especificar un personaje para localizar')  
   
                     self.estado_0()  
   
                 elif accion == "+seguir" or accion == "+seg":  
                     if len(args) == 0:  
                         self.conn().send('Tienes que especificar un personaje para seguir')  
                     else:  
                         self.cmd_seguir(args[0])  
                     self.estado_0()  
617    
618                  elif accion == "+noseguir" or accion == "+noseg":                  elif accion == "+a" or accion == "+atacar":
619                      self.cmd_no_seguir()                      self.conn().send("Comando deshabilitado temporalmente. Lo sentimos.")
620                      self.estado_0()                      self.estado_0()
621    
622                  elif accion == "+ip":                  elif accion == "+sal" or accion == "+salir" or accion == "/q" or accion == "+q":
623                      self.cmd_ip()                      self.estado_1()
624                      self.estado_0()  
625                    elif accion == "+":
626                  elif accion == "+area":                      self.estado_0()
627                      self.cmd_area()                      
628                      self.estado_0()                  elif accion == "+help" or accion == "+ayuda" or accion == "+?":
629                        self.cmd_ayuda(args)
630                  elif accion == "+reloj":                      self.estado_0()
631                      self.cmd_reloj()  
632                      self.estado_0()                  elif accion == "+doc":
633                        self.cmd_doc(args)
634                  elif accion == "":                      self.estado_0()
635                      self.estado_0()  
636                    elif accion == "+actuar" or accion == "+act":
637                  elif accion[0] == "+" or accion == "+":                      mensaje = " ".join(args)
638                      self.conn().send("Error, comando no reconocido. Escribe '+?' y pulsa ENTER")                      self.cmd_actuar(mensaje)
639                      self.conn().send("para una lista de comandos.")                      self.estado_0()
640                      self.estado_0()                      
641                                        elif accion == "+entorno" or accion == "+ent":
642                  else:                      mensaje = " ".join(args)
643                      mensaje = accion + ' ' + " ".join(args)                      self.cmd_entorno(mensaje)
644                      self.cmd_hablar(mensaje, idioma=self.__personaje.idioma_base)                      self.estado_0()
645                      self.estado_0()                      
646                    elif accion == "+listar":
647                        self.cmd_listar_personajes()
648                        self.estado_0()
649                        
650                    elif accion == "+localizar" or accion == "+loc":
651                        try:
652                            self.cmd_localizar(args[0])
653                        except:
654                            self.conn().send('Tienes que especificar un personaje para localizar')
655    
656                        self.estado_0()
657    
658                    elif accion == "+seguir" or accion == "+seg":
659                        if len(args) == 0:
660                            self.conn().send('Tienes que especificar un personaje para seguir')
661                        else:
662                            self.cmd_seguir(args[0])
663                        self.estado_0()
664    
665                    elif accion == "+noseguir" or accion == "+noseg":
666                        self.cmd_no_seguir()
667                        self.estado_0()
668    
669                    elif accion == "+ip":
670                        self.cmd_ip()
671                        self.estado_0()
672    
673                    elif accion == "+area":
674                        self.cmd_area()
675                        self.estado_0()
676    
677                    elif accion == "+reloj":
678                        self.cmd_reloj()
679                        self.estado_0()
680    
681                    elif accion == "":
682                        self.estado_0()
683    
684                    elif accion[0] == "+" or accion == "+":
685                        self.conn().send("Error, comando no reconocido. Escribe '+?' y pulsa ENTER")
686                        self.conn().send("para una lista de comandos.")
687                        self.estado_0()
688                        
689                    else:
690                        mensaje = accion + ' ' + " ".join(args)
691                        self.cmd_hablar(mensaje, idioma=self.__personaje.idioma_base)
692                        self.estado_0()
693    
694          except ExcepcionDeJuego, ex:          except ExcepcionDeJuego, ex:
695    
696              self.conn().send(str(ex))              self.conn().send(str(ex))
697              self.estado_0()              self.estado_0()
698    
699    
700      def parsear_ident_objeto(self, args, comando):      def parsear_ident_objeto(self, args, comando):
701          """Pequeña funcion utilitaria para parsear la secuencia          """Pequeña funcion utilitaria para parsear la secuencia
702          [<id_receptor>] [<cantidad>] id_objeto [<n_orden>] [<n_instancia>] \          [<id_receptor>] [<cantidad>] id_objeto [<n_orden>] [<n_instancia>] \
703          [ +con id_objeto2 [<n_orden2>] [<n_instancia2>] ].          [ +con id_objeto2 [<n_orden2>] [<n_instancia2>] ].
704    
705          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.
706          id_objeto puede tener más de una palabra.          id_objeto puede tener más de una palabra.
707          id_receptor sólo puede tener una palabra.          id_receptor sólo puede tener una palabra.
708          id_receptor sólo se parsea si el comando es "dar"          id_receptor sólo se parsea si el comando es "dar"
709          Los elementos detrás de +con sólo se parsean si el comando es "usar"          Los elementos detrás de +con sólo se parsean si el comando es "usar"
710          """          """
711          id_receptor = ""          id_receptor = ""
712          cantidad = 1          cantidad = 1
713          id_objeto = ""          id_objeto = ""
714          n_orden = 1          n_orden = 1
715          n_instancia = 1          n_instancia = 1
716          id_objeto2 = ""          id_objeto2 = ""
717          n_orden2 = 1          n_orden2 = 1
718          n_instancia2 = 1          n_instancia2 = 1
719          ok = 1          ok = 1
720    
721          i = 0          i = 0
722    
723          if comando == 'dar' and i < len(args) and not args[i].isdigit():          if comando == 'dar' and i < len(args) and not args[i].isdigit():
724              id_receptor = args[i]              id_receptor = args[i]
725              i = i + 1              i = i + 1
726                    
727          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
728              cantidad = int(args[i])              cantidad = int(args[i])
729              i = i + 1              i = i + 1
730    
731          while i < len(args) and not args[i].isdigit() and args[i] != "+con":          while i < len(args) and not args[i].isdigit() and args[i] != "+con":
732              if len(id_objeto) > 0:              if len(id_objeto) > 0:
733                  id_objeto += " "                  id_objeto += " "
734              id_objeto += args[i]              id_objeto += args[i]
735              i = i + 1              i = i + 1
736    
737          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
738              n_orden = int(args[i])              n_orden = int(args[i])
739              i = i + 1              i = i + 1
740    
741          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
742              n_instancia = int(args[i])              n_instancia = int(args[i])
743              i = i + 1              i = i + 1
744    
745          if id_objeto == "":          if id_objeto == "":
746              self.conn().send("Tienes que indicar qué objeto quieres " + comando + ".")              self.conn().send("Tienes que indicar qué objeto quieres " + comando + ".")
747              ok = 0              ok = 0
748          elif cantidad < 1:          elif cantidad < 1:
749              self.conn().send("La cantidad tiene que ser igual o mayor que 1.")              self.conn().send("La cantidad tiene que ser igual o mayor que 1.")
750              ok = 0              ok = 0
751          elif n_orden < 1:          elif n_orden < 1:
752              self.conn().send("El número de orden tiene que ser igual o mayor que 1.")              self.conn().send("El número de orden tiene que ser igual o mayor que 1.")
753              ok = 0              ok = 0
754          elif n_instancia < 1:          elif n_instancia < 1:
755              self.conn().send("El número de objeto tiene que ser igual o mayor que 1.")              self.conn().send("El número de objeto tiene que ser igual o mayor que 1.")
756              ok = 0              ok = 0
757    
758          if ok and i < len(args):          if ok and i < len(args):
759              if comando != 'usar' or args[i] != '+con':              if comando != 'usar' or args[i] != '+con':
760    
761                  self.conn().send("El comando no es correcto, consulta la ayuda con +?")                  self.conn().send("El comando no es correcto, consulta la ayuda con +?")
762                  ok = 0                  ok = 0
763    
764              else:              else:
765    
766                  i = i + 1                  i = i + 1
767    
768                  while i < len(args) and not args[i].isdigit():                  while i < len(args) and not args[i].isdigit():
769                      if len(id_objeto2) > 0:                      if len(id_objeto2) > 0:
770                          id_objeto2 += " "                          id_objeto2 += " "
771                      id_objeto2 += args[i]                      id_objeto2 += args[i]
772                      i = i + 1                      i = i + 1
773    
774                  if i < len(args) and args[i].isdigit():                  if i < len(args) and args[i].isdigit():
775                      n_orden2 = int(args[i])                      n_orden2 = int(args[i])
776                      i = i + 1                      i = i + 1
777    
778                  if i < len(args) and args[i].isdigit():                  if i < len(args) and args[i].isdigit():
779                      n_instancia2 = int(args[i])                      n_instancia2 = int(args[i])
780                      i = i + 1                      i = i + 1
781    
782                  if id_objeto2 == "":                  if id_objeto2 == "":
783                      if n_orden2 < 1:                      if n_orden2 < 1:
784                          self.conn().send("El número de orden 2 tiene que ser igual o mayor que 1.")                          self.conn().send("El número de orden 2 tiene que ser igual o mayor que 1.")
785                          ok = 0                          ok = 0
786                      elif n_instancia2 < 1:                      elif n_instancia2 < 1:
787                          self.conn().send("El número de objeto 2 tiene que ser igual o mayor que 1.")                          self.conn().send("El número de objeto 2 tiene que ser igual o mayor que 1.")
788                          ok = 0                          ok = 0
789                                    
790          if comando == 'dar':          if comando == 'dar':
791              return (id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok)              return (id_receptor, id_objeto, cantidad, n_orden, n_instancia, ok)
792          elif comando == 'usar':          elif comando == 'usar':
793              return (id_objeto, cantidad, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2, ok)              return (id_objeto, cantidad, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2, ok)
794          else:          else:
795              return (id_objeto, cantidad, n_orden, n_instancia, ok)              return (id_objeto, cantidad, n_orden, n_instancia, ok)
796    
797    
798      def parsear_ident_objeto_doble(self, args, comando):      def parsear_ident_objeto_doble(self, args, comando):
799          """Pequeña funcion utilitaria para parsear la secuencia          """Pequeña funcion utilitaria para parsear la secuencia
800          id_objeto [<n_orden>] [<n_instancia>] id_objeto2 [<n_orden2>] [<n_instancia2>].          id_objeto [<n_orden>] [<n_instancia>] id_objeto2 [<n_orden2>] [<n_instancia2>].
801    
802          n_orden y n_instancia se reconocen porque son sólo dígitos.          n_orden y n_instancia se reconocen porque son sólo dígitos.
803          id_objeto sólo puede tener una palabra.          id_objeto sólo puede tener una palabra.
804          """          """
805          cantidad = 1          cantidad = 1
806          id_objeto = ""          id_objeto = ""
807          id_objeto2 = ""          id_objeto2 = ""
808          n_orden = 1          n_orden = 1
809          n_instancia = 1          n_instancia = 1
810          n_orden2 = 1          n_orden2 = 1
811          n_instancia2 = 1          n_instancia2 = 1
812          ok = 0          ok = 0
813    
814          i = 0          i = 0
815    
816          id_objeto += args[i]          id_objeto += args[i]
817          i = i + 1          i = i + 1
818    
819          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
820              n_orden = int(args[i])              n_orden = int(args[i])
821              i = i + 1              i = i + 1
822    
823          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
824              n_instancia = int(args[i])              n_instancia = int(args[i])
825              i = i + 1              i = i + 1
826    
827          id_objeto2 += args[i]          id_objeto2 += args[i]
828          i = i + 1          i = i + 1
829    
830          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
831              n_orden2 = int(args[i])              n_orden2 = int(args[i])
832              i = i + 1              i = i + 1
833    
834          if i < len(args) and args[i].isdigit():          if i < len(args) and args[i].isdigit():
835              n_instancia2 = int(args[i])              n_instancia2 = int(args[i])
836              i = i + 1              i = i + 1
837    
838          if id_objeto == "" or id_objeto2 == "":          if id_objeto == "" or id_objeto2 == "":
839              self.conn().send("Tienes que indicar qué objeto quieres " + comando + ".")              self.conn().send("Tienes que indicar qué objeto quieres " + comando + ".")
840          elif n_orden < 1 or n_orden2 < 1:          elif n_orden < 1 or n_orden2 < 1:
841              self.conn().send("El número de orden tiene que ser igual o mayor que 1.")              self.conn().send("El número de orden tiene que ser igual o mayor que 1.")
842          elif n_instancia < 1 or n_instancia < 1:          elif n_instancia < 1 or n_instancia < 1:
843              self.conn().send("El número de objeto tiene que ser igual o mayor que 1.")              self.conn().send("El número de objeto tiene que ser igual o mayor que 1.")
844          else:          else:
845              ok = 1              ok = 1
846    
847          return (id_objeto, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2, ok)          return (id_objeto, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2, ok)
848    
849    
850      # ---------------------      # ---------------------
# Line 843  class DialogoNormal(Dialogo): Line 852  class DialogoNormal(Dialogo):
852      # ---------------------      # ---------------------
853    
854      def cmd_doc(self,args):      def cmd_doc(self,args):
855          self.conn().send("\n"+color(32)+"--------- Documentación de Minë ---------\n"+finl)          self.conn().send("\n"+color(32)+"--------- Documentación de Minë ---------\n"+finl)
856          if len(args) > 0:          if len(args) > 0:
857                            
858              if args[0] == "instalacion" or args[0] == "inst":              if args[0] == "instalacion" or args[0] == "inst":
859                                    
860                  self.conn().send(ayuda.como_instalar_mine)                  self.conn().send(ayuda.como_instalar_mine)
861                            
862                                    
863              elif args[0] == "tolkien" or args[0] == "jrrt":              elif args[0] == "tolkien" or args[0] == "jrrt":
864                                    
865                  self.conn().send(ayuda.tolkien)                  self.conn().send(ayuda.tolkien)
866                            
867                                    
868              elif args[0] == "gpl" or args[0] == "gnu":              elif args[0] == "gpl" or args[0] == "gnu":
869                                    
870                  self.conn().send(ayuda.gpl)                  self.conn().send(ayuda.gpl)
871    
872          else:          else:
873              self.conn().send("Los documentos disponibles actualmente son:\n")              self.conn().send("Los documentos disponibles actualmente son:\n")
874              self.conn().send("[ instalacion | tolkien | gpl ]")              self.conn().send("[ instalacion | tolkien | gpl ]")
875    
876                            
877      def cmd_ayuda(self,args):      def cmd_ayuda(self,args):
878    
879        self.conn().send("\n"+color(32)+"------------------------ Ayuda de Minë ------------------------\n"+finl)        self.conn().send("\n"+color(32)+"------------------------ Ayuda de Minë ------------------------\n"+finl)
# Line 914  class DialogoNormal(Dialogo): Line 923  class DialogoNormal(Dialogo):
923                                
924            elif args[0] == "objetos":            elif args[0] == "objetos":
925                                
926                self.conn().send(color(33)+" Objetos\n"+finl)                                    self.conn().send(color(33)+" Objetos\n"+finl)                    
927                self.conn().send(" Coger un objeto de la sala y meterlo en la mochila:")                self.conn().send(" Coger un objeto de la sala y meterlo en la mochila:")
928                self.conn().send(color(31) + '  +[c]oger [<cantidad>] <id_objeto> [<n_orden> [<n_unidad>]]' + finl)                self.conn().send(color(31) + '  +[c]oger [<cantidad>] <id_objeto> [<n_orden> [<n_unidad>]]' + finl)
929                self.conn().send(" Dejar un objeto de la mochila en la sala:")                self.conn().send(" Dejar un objeto de la mochila en la sala:")
# Line 933  class DialogoNormal(Dialogo): Line 942  class DialogoNormal(Dialogo):
942                                
943                self.conn().send(" Usar un objeto de la mochila (opcionalmente con otro en mochila o sala):")                self.conn().send(" Usar un objeto de la mochila (opcionalmente con otro en mochila o sala):")
944                self.conn().send(color(31) + '  +[u]sar <nombre> [<n_orden> [<n_unidad>]]')                self.conn().send(color(31) + '  +[u]sar <nombre> [<n_orden> [<n_unidad>]]')
945                self.conn().send(            '    [+con <nombre> [<n_orden> [<n_unidad>]]]' + finl)                self.conn().send(            '    [+con <nombre> [<n_orden> [<n_unidad>]]]' + finl)
946                                
947                self.conn().send("")                self.conn().send("")
948                                
# Line 1002  class DialogoNormal(Dialogo): Line 1011  class DialogoNormal(Dialogo):
1011                self.conn().send("Lista de jugadores de Minë (Sólo Maiar): " +                self.conn().send("Lista de jugadores de Minë (Sólo Maiar): " +
1012                                 color(31) + '+listar' + finl)                                 color(31) + '+listar' + finl)
1013                                
1014            elif args[0] == "hablar":                        elif args[0] == "hablar":            
1015                                
1016                self.conn().send(color(33)+" Hablar\n"+finl)                self.conn().send(color(33)+" Hablar\n"+finl)
1017                self.conn().send("Hablar en oestron en la sala actual: " +                self.conn().send("Hablar en oestron en la sala actual: " +
# Line 1078  class DialogoNormal(Dialogo): Line 1087  class DialogoNormal(Dialogo):
1087    
1088          if len(argumentos) != 1:          if len(argumentos) != 1:
1089              self.conn().send("Debes decir de qué personaje quieres recapitular.")              self.conn().send("Debes decir de qué personaje quieres recapitular.")
1090              return              return
1091    
1092          pnjs = self.__personaje.sala.personajes          pnjs = self.__personaje.sala.personajes
1093    
1094          encontrado = 0          encontrado = 0
1095          for pnj in pnjs.values():          for pnj in pnjs.values():
1096              if normalizar_id(argumentos[0]) == extraer_id(pnj.nombre):              if normalizar_id(argumentos[0]) == extraer_id(pnj.nombre):
1097                 argumentos = argumentos[1:]                 argumentos = argumentos[1:]
1098                 encontrado = 1                 encontrado = 1
1099                 break                 break
1100    
1101          if encontrado == 0:          if encontrado == 0:
1102              self.conn().send("No conoces a nadie llamado " + argumentos[0])              self.conn().send("No conoces a nadie llamado " + argumentos[0])
1103              return              return
1104    
1105          from interfazpnjhablante import InterfazPNJHablante          from interfazpnjhablante import InterfazPNJHablante
1106          if not isinstance(pnj.controlador, InterfazPNJHablante):          if not isinstance(pnj.controlador, InterfazPNJHablante):
1107              self.conn().send(pnj.nombre + " no responde.\n")              self.conn().send(pnj.nombre + " no responde.\n")
1108              return              return
1109                    
1110          try:          try:
1111              visita = pnj.controlador._visitas[0]              visita = pnj.controlador._visitas[0]
1112              items = visita.items()[:]              items = visita.items()[:]
1113              items.reverse()              items.reverse()
1114              duplicados = []              duplicados = []
# Line 1124  class DialogoNormal(Dialogo): Line 1133  class DialogoNormal(Dialogo):
1133                  if tema not in temas:                  if tema not in temas:
1134                      temas.append(tema)                      temas.append(tema)
1135                      self.conn().send(disponible + tema)                      self.conn().send(disponible + tema)
1136                                    
1137          except Exception:          except Exception:
1138              # Conviene protegerse contra errores en carga de salas. No es bueno que por              # Conviene protegerse contra errores en carga de salas. No es bueno que por
1139              # un fichero de sala mal escrito pete el servidor entero o te eche de la              # un fichero de sala mal escrito pete el servidor entero o te eche de la
1140              # conexión.              # conexión.
1141              escribir( "Ha saltado una excepcion al intentar recapitular")              escribir( "Ha saltado una excepcion al intentar recapitular")
1142              escribir_excepcion()              escribir_excepcion()
1143              if self.conn().is_open:              if self.conn().is_open:
1144                  self.conn().send("Ha habido un error interno del programa referente a esta conversación.")                  self.conn().send("Ha habido un error interno del programa referente a esta conversación.")
1145                  self.conn().send("No puedes recapitular esta conversación. Por favor, habla con algun administrador de Mine.")                  self.conn().send("No puedes recapitular esta conversación. Por favor, habla con algun administrador de Mine.")
1146          return          return
1147            
1148    
1149      def cmd_hablar_pnj(self, comando, argumentos):      def cmd_hablar_pnj(self, comando, argumentos):
1150    
1151          from interfazpnjhablante import InterfazPNJHablante          from interfazpnjhablante import InterfazPNJHablante
1152          pnjs = [ personaje for personaje in self.__personaje.sala.personajes.values() \          pnjs = filter(lambda personaje:isinstance(personaje.controlador, InterfazPNJHablante), \
1153                                           if isinstance(personaje.controlador, InterfazPNJHablante) ]                          self.__personaje.sala.personajes.values())
1154                                                                                    
1155          if len(pnjs) == 0:          if len(pnjs) == 0:
1156              self.conn().send("No hay PNJs en la sala con quienes hablar\n")              self.conn().send("No hay PNJs en la sala con quienes hablar\n")
1157              return              return
1158                    
1159          encontrado = 0          encontrado = 0
1160                    
1161          if len(argumentos) < 2:          if len(argumentos) < 2:
1162            if len(argumentos) < 1 or len(pnjs) > 1:            if len(pnjs) > 1:
1163                self.conn().send("Debes indicar a qué personaje quieres decir o preguntar algo.")
1164                self.conn().send("Utiliza el formato +<accion> <personaje> <tema>")
1165                return
1166              elif len(argumentos) < 1:
1167              self.conn().send("Debes decir o preguntar a alguien por algo.")              self.conn().send("Debes decir o preguntar a alguien por algo.")
1168              return              self.conn().send("Utiliza el formato +decir <tema> o +preguntar <tema>")
1169            elif len(pnjs) == 1:              return
1170                  pnj = pnjs[0]            elif len(pnjs) == 1:
1171                  encontrado = 1                  pnj = pnjs[0]
1172                    encontrado = 1
1173          if encontrado == 0:  
1174                  for pnj in pnjs.values():          if encontrado == 0:
1175                      if normalizar_id(argumentos[0]) == extraer_id(pnj.nombre):                  for pnj in pnjs:
1176                          argumentos = argumentos[1:]                      if normalizar_id(argumentos[0]) == extraer_id(pnj.nombre):
1177                          encontrado = 1                          argumentos = argumentos[1:]
1178                          break                          encontrado = 1
1179                            break
1180    
1181          if encontrado == 0:          if encontrado == 0:
1182              self.conn().send("No has indicado correctamente con quién deseas hablar\n")              self.conn().send("No has indicado correctamente con quién deseas hablar\n")
1183              return              return
1184                    
1185          if not isinstance(pnj.controlador, InterfazPNJHablante):          if not isinstance(pnj.controlador, InterfazPNJHablante):
1186              self.conn().send(pnj.nombre + " no responde.\n")              self.conn().send(pnj.nombre + " no responde.\n")
1187              return                    return      
1188                    
1189          try:          try:
1190              pnj.controlador.conversa_personaje(self.__personaje, comando,              libre = pnj.controlador.conversa_personaje(self.__personaje, comando,
1191                                                 string.join(argumentos, ' '))                                                 string.join(argumentos, ' '))
1192          except Exception:              if not libre:
1193              # Conviene protegerse contra errores en carga de pnjs. No es bueno que por                  self.conn().send("Todavía está hablando con alguien. Debes esperar a que termine.")
1194              # un fichero de pnj mal escrito pete el servidor entero o te eche de la          except Exception:
1195              # conexión.              # Conviene protegerse contra errores en carga de pnjs. No es bueno que por
1196              escribir( "Ha saltado una excepcion al intentar " + comando)              # un fichero de pnj mal escrito pete el servidor entero o te eche de la
1197              escribir_excepcion()              # conexión.
1198              if self.conn().is_open:              escribir( "Ha saltado una excepcion al intentar " + comando)
1199                  self.conn().send("Ha habido un error interno del programa referente a esta conversación.")              escribir_excepcion()
1200                  self.conn().send("No puedes hacer esta pregunta. Por favor, habla con algun administrador de Mine. Puedes escribir a mine_ste@yahoogroups.com.")              if self.conn().is_open:
1201                    self.conn().send("Ha habido un error interno del programa referente a esta conversación.")
1202                    self.conn().send("No puedes hacer esta pregunta. Por favor, habla con algun administrador de Mine. Puedes escribir a mine_ste@yahoogroups.com.")
1203    
1204    
1205      def cmd_mover(self, id_sala_destino):      def cmd_mover(self, id_sala_destino):
1206    
1207          # Comprobar si la puerta está cerrada y si podemos abrirla          # Comprobar si la puerta está cerrada y si podemos abrirla
1208          podemos_pasar = 1          podemos_pasar = 1
1209          cierre = self.__personaje.sala.salida_cerrada(id_sala_destino)          cierre = self.__personaje.sala.salida_cerrada(id_sala_destino)
1210          id_llave = cierre[0]          id_llave = cierre[0]
1211          msg_cerrado = cierre[1]          msg_cerrado = cierre[1]
1212          if id_llave != None:          if id_llave != None:
1213              podemos_pasar = 0              podemos_pasar = 0
1214              for objeto in self.__personaje.mochila:              for objeto in self.__personaje.mochila:
1215                  if objeto[0].id == id_llave:                  if objeto[0].id == id_llave:
1216                      self.conn().send(color(35) + "Abres el paso con " + objeto[0].nombre + finl)                      self.conn().send(color(35) + "Abres el paso con " + objeto[0].nombre + finl)
1217                      podemos_pasar = 1                      podemos_pasar = 1
1218    
1219          if not podemos_pasar:          if not podemos_pasar:
1220              self.conn().send(msg_cerrado)              self.conn().send(msg_cerrado)
1221          else:          else:
1222              try:              try:
1223                  nueva_sala = Mundo.localizar_sala(id_sala_destino)                  nueva_sala = Mundo.localizar_sala(id_sala_destino)
1224              except Exception:              except Exception:
1225                  # Conviene protegerse contra errores en carga de salas. No es bueno que por                  # Conviene protegerse contra errores en carga de salas. No es bueno que por
1226                  # un fichero de sala mal escrito pete el servidor entero o te eche de la                  # un fichero de sala mal escrito pete el servidor entero o te eche de la
1227                  # conexión.                  # conexión.
1228                  escribir( "Ha saltado una excepcion al intentar entrar en " + id_sala_destino)                  escribir( "Ha saltado una excepcion al intentar entrar en " + id_sala_destino)
1229                  escribir_excepcion()                  escribir_excepcion()
1230                  if self.conn().is_open:                  if self.conn().is_open:
1231                      self.conn().send("Ha habido un error interno del programa referente a esta sala.")                      self.conn().send("Ha habido un error interno del programa referente a esta sala.")
1232                      self.conn().send("No puedes ir ahi. Por favor, habla con algun administrador de Mine.")                      self.conn().send("No puedes ir ahi. Por favor, habla con algun administrador de Mine.")
1233              else:              else:
1234    
1235                  if nueva_sala.volumen_ocupado() + self.__personaje.volumen_total() > nueva_sala.volumen:                  if nueva_sala.volumen_ocupado() + self.__personaje.volumen_total() > nueva_sala.volumen:
1236    
1237                      self.conn().send("Ese lugar está al límite de su capacidad y no cabes. No puedes ir allí.")                      self.conn().send("Ese lugar está al límite de su capacidad y no cabes. No puedes ir allí.")
1238    
1239                  else:                  else:
1240    
1241                      if self.__personaje.anterior != None:                      if self.__personaje.anterior != None:
1242                          id_lider = self.__personaje.anterior.id                          id_lider = self.__personaje.anterior.id
1243                      else:                      else:
1244                          id_lider = None                          id_lider = None
1245                                            
1246                      self.__personaje.mover(nueva_sala)  # aqui se deja de seguir al lider, si lo hay                      self.__personaje.mover(nueva_sala)  # aqui se deja de seguir al lider, si lo hay
1247                      self.lanzar_tirada_percep_sala()                      self.lanzar_tirada_percep_sala()
1248                      self.cmd_mirar()                      self.cmd_mirar()
1249    
1250                      if self.__personaje.salas_visitadas.get(id_sala_destino) != 'si':                      if self.__personaje.salas_visitadas.get(id_sala_destino) != 'si':
1251                          self.conn().send("Es la primera vez que estás aquí...")                          self.conn().send("Es la primera vez que estás aquí...")
1252                          self.__personaje.salas_visitadas.update({id_sala_destino:'si'})                          self.__personaje.salas_visitadas.update({id_sala_destino:'si'})
1253                          #Ganamos un punto de experiencia (hay que premiar la exploración)                          #Ganamos un punto de experiencia (hay que premiar la exploración)
1254                          self.__personaje.cambiar_experiencia(+1)                          self.__personaje.cambiar_experiencia(+1)
1255    
1256                      if id_lider != None:                      if id_lider != None:
1257                          self.conn().send('Ya no estas siguiendo a ' + id_lider)                          self.conn().send('Ya no estas siguiendo a ' + id_lider)
1258            
1259    
1260      def cmd_amigos(self, id_amigo):      def cmd_amigos(self, id_amigo):
# Line 1255  class DialogoNormal(Dialogo): Line 1271  class DialogoNormal(Dialogo):
1271            
1272    
1273      def cmd_silencio(self):      def cmd_silencio(self):
1274          if self.__personaje.silencio == 'no':          if self.__personaje.silencio == 'no':
1275              self.__personaje.silencio = 'sí'              self.__personaje.silencio = 'sí'
1276          else:          else:
1277              self.__personaje.silencio = 'no'              self.__personaje.silencio = 'no'
1278                    
1279          self.conn().send("Has elegido que "+self.__personaje.silencio+" haya silencio")          self.conn().send("Has elegido que "+self.__personaje.silencio+" haya silencio")
1280                            
1281    
1282      def cmd_susurrar(self, nombre_oyente, mensaje, idioma=Idioma_oestron):      def cmd_susurrar(self, nombre_oyente, mensaje, idioma=Idioma_oestron):
1283          if len(mensaje) == 0:          if len(mensaje) == 0:
1284              self.conn().send('Tienes que decir algo...')              self.conn().send('Tienes que decir algo...')
1285          elif self.__personaje.id == nombre_oyente:          elif self.__personaje.id == nombre_oyente:
1286              self.conn().send('no tiene sentido que te hables a ti mismo')                  self.conn().send('no tiene sentido que te hables a ti mismo')    
1287          else:          else:
1288              if self.__personaje.sala != None:              if self.__personaje.sala != None:
1289                  encontrado = 0                  encontrado = 0
1290                  for personaje in  self.__personaje.sala.personajes.values():                  for personaje in  self.__personaje.sala.personajes.values():
1291                      if personaje !=self.__personaje and personaje.controlador != None and personaje.id == nombre_oyente:                      if personaje !=self.__personaje and personaje.controlador != None and personaje.id == nombre_oyente:
1292                          encontrado = 1                          encontrado = 1
1293                          self.__personaje.susurrar(personaje,mensaje,idioma)                          self.__personaje.susurrar(personaje,mensaje,idioma)
1294                          self.conn().send("Susurras a "+personaje.id+": "+mensaje)                          self.conn().send("Susurras a "+personaje.id+": "+mensaje)
1295                  if encontrado == 0:                  if encontrado == 0:
1296                      self.conn().send('no hay nadie aquí que se llame '+nombre_oyente)                      self.conn().send('no hay nadie aquí que se llame '+nombre_oyente)
1297                                            
1298    
1299      def cmd_localizar(self, id_personaje):      def cmd_localizar(self, id_personaje):
1300          try:          try:
1301              personaje = Mundo.pjs_activos[id_personaje]              personaje = Mundo.pjs_activos[id_personaje]
1302              self.conn().send(id_personaje +              self.conn().send(id_personaje +
1303                             ' está en ' + personaje.sala.nombre +                             ' está en ' + personaje.sala.nombre +
1304                             ' en el area de ' + personaje.sala.area)                             ' en el area de ' + personaje.sala.area)
1305          except KeyError:          except KeyError:
1306              self.conn().send('No existe ningun personaje con ese nombre jugando en Minë en este momento')              self.conn().send('No existe ningun personaje con ese nombre jugando en Minë en este momento')
1307    
1308    
1309      def cmd_listar_personajes(self):      def cmd_listar_personajes(self):
1310          ids_personajes = [ personaje.id for personaje in Mundo.pjs_activos.values() ]          ids_personajes = [ personaje.id for personaje in Mundo.pjs_activos.values() ]
1311    
1312          self.conn().send('En este momento hay ' + `len(ids_personajes)` +          self.conn().send('En este momento hay ' + `len(ids_personajes)` +
1313                         ' personajes en Mine:\n' +                         ' personajes en Mine:\n' +
1314                         '\n'.join(ids_personajes))                         '\n'.join(ids_personajes))
1315    
1316                            
1317      def cmd_hablar(self, mensaje, idioma=Idioma_oestron):      def cmd_hablar(self, mensaje, idioma=Idioma_oestron):
1318          if len(mensaje) > 0:          if len(mensaje) > 0:
1319              self.__personaje.hablar(mensaje,idioma)              self.__personaje.hablar(mensaje,idioma)
1320              self.conn().send('Dices: '+ self.__personaje.color_texto() + mensaje)              self.conn().send('Dices: '+ self.__personaje.color_texto() + mensaje)
1321          else:          else:
1322              self.conn().send('Tienes que decir algo...')              self.conn().send('Tienes que decir algo...')
1323                            
1324            
1325      def cmd_entorno(self, suceso):      def cmd_entorno(self, suceso):
1326          if len(suceso) > 0:          if len(suceso) > 0:
1327              self.__personaje.describir_entorno(suceso)              self.__personaje.describir_entorno(suceso)
1328          else:          else:
1329              self.conn().send('Tienes que describir algo...')              self.conn().send('Tienes que describir algo...')
1330                            
1331                    
1332      def cmd_actuar(self, mensaje):      def cmd_actuar(self, mensaje):
1333          if len(mensaje) > 0:          if len(mensaje) > 0:
1334              self.__personaje.actuar(mensaje)              self.__personaje.actuar(mensaje)
1335              self.conn().send(self.__personaje.id+' '+mensaje)              self.conn().send(self.__personaje.id+' '+mensaje)
1336          else:          else:
1337              self.conn().send('Tienes que hacer algo...')              self.conn().send('Tienes que hacer algo...')
1338                    
1339                            
1340      def cmd_gritar(self, mensaje, idioma=Idioma_oestron):      def cmd_gritar(self, mensaje, idioma=Idioma_oestron):
1341          if len(mensaje) > 0:          if len(mensaje) > 0:
1342              self.__personaje.gritar(mensaje,idioma)              self.__personaje.gritar(mensaje,idioma)
1343              self.conn().send("Gritas: "+mensaje)              self.conn().send("Gritas: "+mensaje)
1344          else:          else:
1345              self.conn().send('Tienes que decir algo...')              self.conn().send('Tienes que decir algo...')
# Line 1331  class DialogoNormal(Dialogo): Line 1347  class DialogoNormal(Dialogo):
1347                    
1348      def cmd_estadisticas(self):      def cmd_estadisticas(self):
1349          self.conn().send(color(31))          self.conn().send(color(31))
1350          self.conn().send("Estadísticas de " + self.__personaje.nombre)          self.conn().send("Estadísticas de " + self.__personaje.nombre)
1351          self.conn().send("-------------------------------------------------------------------")          self.conn().send("-------------------------------------------------------------------")
1352    
1353          self.conn().send(color(32), 0)          self.conn().send(color(32), 0)
1354          self.conn().send("Nombre: %-17s Aura: %-17d Nivel: %10d" %          self.conn().send("Nombre: %-17s Aura: %-17d Nivel: %10d" %
1355                           (self.__personaje.id,                           (self.__personaje.id,
1356                            self.__personaje.aura,                            self.__personaje.aura,
1357                            self.__personaje.nivel))                            self.__personaje.nivel))
1358          self.conn().send("Raza:   %-17s Vida: %-17d Experiencia: %4d" %          self.conn().send("Raza:   %-17s Vida: %-17d Experiencia: %4d" %
1359                           (self.__personaje.raza.nombre,                           (self.__personaje.raza.nombre,
1360                            self.__personaje.vida,                            self.__personaje.vida,
1361                            self.__personaje.experiencia))                            self.__personaje.experiencia))
1362          self.conn().send("Edad:   %-17d Profesion: %-12s Fuerza:       %3d" %          self.conn().send("Edad:   %-17d Profesion: %-12s Fuerza:       %3d" %
1363                           (self.__personaje.edad,                           (self.__personaje.edad,
1364                            self.__personaje.profesion.nombre,                            self.__personaje.profesion.nombre,
1365                            self.__personaje.atrib["fuerza"]))                            self.__personaje.atrib["fuerza"]))
1366          self.conn().send("Sexo:   %-17s Idiomas:                Destreza:     %3d" %          self.conn().send("Sexo:   %-17s Idiomas:                Destreza:     %3d" %
1367                           (self.__personaje.sexo,                           (self.__personaje.sexo,
1368                            self.__personaje.atrib["destreza"]))                            self.__personaje.atrib["destreza"]))
1369          self.conn().send("Altura: %-17.2f   quenya:  %-12s Constitución: %3d" %          self.conn().send("Altura: %-17.2f   quenya:  %-12s Constitución: %3d" %
1370                           (self.__personaje.altura,                           (self.__personaje.altura,
1371                            self.__personaje.idiomas[Idioma_quenya],                            self.__personaje.idiomas[Idioma_quenya],
1372                            self.__personaje.atrib["constitucion"]))                            self.__personaje.atrib["constitucion"]))
1373          self.conn().send("Peso:   %-17d   orco:    %-12s Inteligencia: %3d" %          self.conn().send("Peso:   %-17d   orco:    %-12s Inteligencia: %3d" %
1374                           (self.__personaje.peso,                           (self.__personaje.peso,
1375                            self.__personaje.idiomas[Idioma_orco],                            self.__personaje.idiomas[Idioma_orco],
1376                            self.__personaje.atrib["inteligencia"]))                            self.__personaje.atrib["inteligencia"]))
1377          self.conn().send("Color de ojos: %-11s  enano:   %-12s Sabiduria:    %3d" %          self.conn().send("Color de ojos: %-11s  enano:   %-12s Sabiduria:    %3d" %
1378                           (self.__personaje.color_de_ojos,                           (self.__personaje.color_de_ojos,
1379                            self.__personaje.idiomas[Idioma_enano],                            self.__personaje.idiomas[Idioma_enano],
1380                            self.__personaje.atrib["sabiduria"]))                            self.__personaje.atrib["sabiduria"]))
1381          self.conn().send("Color de pelo: %-11s  oestron: %-12s Carisma:      %3d" %          self.conn().send("Color de pelo: %-11s  oestron: %-12s Carisma:      %3d" %
1382                           (self.__personaje.color_de_pelo,                           (self.__personaje.color_de_pelo,
1383                            self.__personaje.idiomas[Idioma_oestron],                            self.__personaje.idiomas[Idioma_oestron],
1384                            self.__personaje.atrib["carisma"]))                            self.__personaje.atrib["carisma"]))
1385          self.conn().send("El idioma en el que hablas es: %s " % (self.__personaje.idioma_base.nombre))          self.conn().send("El idioma en el que hablas es: %s " % (self.__personaje.idioma_base.nombre))
1386          self.conn().send(self.__personaje.mensaje_hambre)          self.conn().send(self.__personaje.mensaje_hambre)
1387          self.conn().send(self.__personaje.mensaje_sed)          self.conn().send(self.__personaje.mensaje_sed)
1388          self.conn().send(color(31) + "-------------------------------------------------------------------" + finl)          self.conn().send(color(31) + "-------------------------------------------------------------------" + finl)
1389                    
1390                    
# Line 1435  class DialogoNormal(Dialogo): Line 1451  class DialogoNormal(Dialogo):
1451                          self.conn().send(" (" + str(len(objeto["instancias"])) + ")", 0)                          self.conn().send(" (" + str(len(objeto["instancias"])) + ")", 0)
1452                      self.conn().send(finl)                      self.conn().send(finl)
1453    
1454          self.conn().send("")          self.conn().send("")
1455    
1456                            
1457      def cmd_mochila(self):      def cmd_mochila(self):
1458          self.conn().send(color(31) + "--------- Contenido de la mochila ---------" + finl)          self.conn().send(color(31) + "--------- Contenido de la mochila ---------" + finl)
1459          if len(self.__personaje.mochila) == 0:          if len(self.__personaje.mochila) == 0:
1460              self.conn().send("(la mochila esta vacia)")              self.conn().send("(la mochila esta vacia)")
1461          else:          else:
1462              self.conn().send(color(31) + "%-35s%-8s" % ("Nombre", "Cantidad") + finl)              self.conn().send(color(31) + "%-35s%-8s" % ("Nombre", "Cantidad") + finl)
1463              for objetos in self.__personaje.mochila:              for objetos in self.__personaje.mochila:
1464                  self.conn().send("%-35s%8d" % (objetos[0].nombre, len(objetos)))                  self.conn().send("%-35s%8d" % (objetos[0].nombre, len(objetos)))
1465    
1466    
1467      def cmd_idioma(self, nombre_idioma_base):      def cmd_idioma(self, nombre_idioma_base):
1468          if len(nombre_idioma_base) == 0:          if len(nombre_idioma_base) == 0:
1469              self.conn().send("Tu idioma base actual es " + self.__personaje.idioma_base.nombre)              self.conn().send("Tu idioma base actual es " + self.__personaje.idioma_base.nombre)
1470          else:          else:
1471              idioma_base = Idioma_buscar(nombre_idioma_base)              idioma_base = Idioma_buscar(nombre_idioma_base)
1472              if idioma_base != None:              if idioma_base != None:
1473                  self.__personaje.idioma_base = idioma_base                  self.__personaje.idioma_base = idioma_base
1474                  self.conn().send("Tu idioma por defecto es ahora " + idioma_base.nombre)                  self.conn().send("Tu idioma por defecto es ahora " + idioma_base.nombre)
1475              else:              else:
1476                  self.conn().send("Lo siento, has de elegir como idioma base uno " +                  self.conn().send("Lo siento, has de elegir como idioma base uno " +
1477                                   "de los siguientes: " +                                   "de los siguientes: " +
1478                                   ", ".join([ i.nombre for i in Idioma_lista ]))                                   ", ".join([ i.nombre for i in Idioma_lista ]))
1479                    
1480    
1481      def cmd_coger(self, id_objeto, cantidad, n_orden, n_instancia):      def cmd_coger(self, id_objeto, cantidad, n_orden, n_instancia):
1482          try:          try:
1483    
1484              #%% aqui faltaría lo del sigilo...              #%% aqui faltaría lo del sigilo...
1485              nombre = self.__personaje.coger(id_objeto, cantidad, n_orden, n_instancia)              nombre = self.__personaje.coger(id_objeto, cantidad, n_orden, n_instancia)
1486    
1487              self.conn().send("Has cogido " + nombre, 0)              self.conn().send("Has cogido " + nombre, 0)
1488              if cantidad > 1:              if cantidad > 1:
1489                  self.conn().send(" (" + str(cantidad) + " unidades)")                  self.conn().send(" (" + str(cantidad) + " unidades)")
1490              else:              else:
1491                  self.conn().send("")                  self.conn().send("")
1492    
1493          except ExcepcionDeJuego, mensaje:          except ExcepcionDeJuego, mensaje:
1494    
1495              self.conn().send(str(mensaje))              self.conn().send(str(mensaje))
1496    
1497                    
1498  #%%    def cmd_coger(self, id_objeto, cantidad, n_orden, n_instancia):  #%%    def cmd_coger(self, id_objeto, cantidad, n_orden, n_instancia):
1499  #%%     encontrados = 0  #%%     encontrados = 0
1500  #%%     n_objeto = -1  #%%     n_objeto = -1
1501  #%%  #%%
1502  #%%     # Buscar el objeto en la sala. Puede que haya varios con el mismo identificativo,  #%%     # Buscar el objeto en la sala. Puede que haya varios con el mismo identificativo,
1503  #%%     # discriminamos con el parametro n_orden.  #%%     # discriminamos con el parametro n_orden.
1504  #%%     for objeto in self.__personaje.sala.objetos:  #%%     for objeto in self.__personaje.sala.objetos:
1505  #%%         n_objeto = n_objeto + 1  #%%         n_objeto = n_objeto + 1
1506  #%%         instancias = objeto["instancias"]  #%%         instancias = objeto["instancias"]
1507  #%%         if len(instancias) > 0:  #%%         if len(instancias) > 0:
1508  #%%             if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):  #%%             if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):
1509  #%%                 encontrados = encontrados + 1  #%%                 encontrados = encontrados + 1
1510  #%%                 if encontrados == n_orden:  #%%                 if encontrados == n_orden:
1511  #%%  #%%
1512  #%%                     # Hemos encontrado el objeto, ahora vemos si hay instancias  #%%                     # Hemos encontrado el objeto, ahora vemos si hay instancias
1513  #%%                     # suficientes.  #%%                     # suficientes.
1514  #%%                     if (n_instancia + cantidad - 1) > len(instancias):  #%%                     if (n_instancia + cantidad - 1) > len(instancias):
1515  #%%                         self.conn().send("No hay " + str(n_instancia + cantidad - 1) +  #%%                         self.conn().send("No hay " + str(n_instancia + cantidad - 1) +
1516  #%%                                          " instancias de ese objeto, solo hay " +  #%%                                          " instancias de ese objeto, solo hay " +
1517  #%%                                          str(len(instancias)))  #%%                                          str(len(instancias)))
1518  #%%                     else:  #%%                     else:
1519  #%%  #%%
1520  #%%                         # Todo ok: cogemos las instancias y las metemos en la mochila  #%%                         # Todo ok: cogemos las instancias y las metemos en la mochila
1521  #%%                         for i in range(0, cantidad):  #%%                         for i in range(0, cantidad):
1522  #%%                             instancia = self.__personaje.sala.coger_objeto(n_objeto,  #%%                             instancia = self.__personaje.sala.coger_objeto(n_objeto,
1523  #%%                                                                            n_instancia - 1)  #%%                                                                            n_instancia - 1)
1524  #%%                             self.__personaje.meter_en_mochila(instancia)  #%%                             self.__personaje.meter_en_mochila(instancia)
1525  #%%  #%%
1526  #%%                         self.__personaje.actuar("ha cogido " + instancia.nombre)  #%%                         self.__personaje.actuar("ha cogido " + instancia.nombre)
1527  #%%                         self.conn().send("Has cogido " + instancia.nombre, 0)  #%%                         self.conn().send("Has cogido " + instancia.nombre, 0)
1528  #%%                         if cantidad > 1:  #%%                         if cantidad > 1:
1529  #%%                             self.conn().send(" (" + str(cantidad) + " unidades)")  #%%                             self.conn().send(" (" + str(cantidad) + " unidades)")
1530  #%%                         else:  #%%                         else:
1531  #%%                             self.conn().send("")  #%%                             self.conn().send("")
1532  #%%  #%%
1533  #%%                     break  #%%                     break
1534  #%%                  #%%                
1535  #%%     if encontrados == 0:  #%%     if encontrados == 0:
1536  #%%         self.conn().send("No hay en la sala ningún objeto con identificativo " + id_objeto)  #%%         self.conn().send("No hay en la sala ningún objeto con identificativo " + id_objeto)
1537  #%%     elif encontrados < n_orden:  #%%     elif encontrados < n_orden:
1538  #%%         self.conn().send("No hay en la sala suficientes objetos con identificativo " +  #%%         self.conn().send("No hay en la sala suficientes objetos con identificativo " +
1539  #%%                          id_objeto + ", solo hay " + str(encontrados))  #%%                          id_objeto + ", solo hay " + str(encontrados))
1540    
1541    
1542  #%%    def cmd_coger(self, nombre_objeto, cantidad=1):  #%%    def cmd_coger(self, nombre_objeto, cantidad=1):
# Line 1547  class DialogoNormal(Dialogo): Line 1563  class DialogoNormal(Dialogo):
1563    
1564    
1565      def cmd_dejar(self, id_objeto, cantidad, n_orden, n_instancia):      def cmd_dejar(self, id_objeto, cantidad, n_orden, n_instancia):
1566          try:          try:
1567    
1568              #%% aqui faltaría lo del sigilo...              #%% aqui faltaría lo del sigilo...
1569              nombre = self.__personaje.dejar(id_objeto, cantidad, n_orden, n_instancia)              nombre = self.__personaje.dejar(id_objeto, cantidad, n_orden, n_instancia)
1570    
1571              self.conn().send("Has dejado " + nombre, 0)              self.conn().send("Has dejado " + nombre, 0)
1572              if cantidad > 1:              if cantidad > 1:
1573                  self.conn().send(" (" + str(cantidad) + " unidades)")                  self.conn().send(" (" + str(cantidad) + " unidades)")
1574              else:              else:
1575                  self.conn().send("")                  self.conn().send("")
1576    
1577          except ExcepcionDeJuego, mensaje:          except ExcepcionDeJuego, mensaje:
1578    
1579              self.conn().send(str(mensaje))              self.conn().send(str(mensaje))
1580    
1581    
1582                    
1583  #%%    def cmd_dejar(self, id_objeto, cantidad, n_orden, n_instancia, dificultad = 0):  #%%    def cmd_dejar(self, id_objeto, cantidad, n_orden, n_instancia, dificultad = 0):
1584  #%%     encontrados = 0  #%%     encontrados = 0
1585  #%%     n_objeto = -1  #%%     n_objeto = -1
1586  #%%  #%%
1587  #%%     # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,  #%%     # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,
1588  #%%     # discriminamos con el parametro n_orden.  #%%     # discriminamos con el parametro n_orden.
1589  #%%     for instancias in self.__personaje.mochila:  #%%     for instancias in self.__personaje.mochila:
1590  #%%         n_objeto = n_objeto + 1  #%%         n_objeto = n_objeto + 1
1591  #%%         if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):  #%%         if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):
1592  #%%             encontrados = encontrados + 1  #%%             encontrados = encontrados + 1
1593  #%%             if encontrados == n_orden:  #%%             if encontrados == n_orden:
1594  #%%  #%%
1595  #%%                 # Hemos encontrado el objeto, ahora vemos si hay instancias  #%%                 # Hemos encontrado el objeto, ahora vemos si hay instancias
1596  #%%                 # suficientes.  #%%                 # suficientes.
1597  #%%                 if (n_instancia + cantidad - 1) > len(instancias):  #%%                 if (n_instancia + cantidad - 1) > len(instancias):
1598  #%%                     self.conn().send("No tienes " + str(n_instancia + cantidad - 1) +  #%%                     self.conn().send("No tienes " + str(n_instancia + cantidad - 1) +
1599  #%%                                      " unidades de ese objeto en la mochila, solo tienes " +  #%%                                      " unidades de ese objeto en la mochila, solo tienes " +
1600  #%%                                      str(len(instancias)))  #%%                                      str(len(instancias)))
1601  #%%                 else:  #%%                 else:
1602  #%%  #%%
1603  #%%                     # Todo ok: sacamos las instancias de la mochila y las dejamos  #%%                     # Todo ok: sacamos las instancias de la mochila y las dejamos
1604  #%%                     # en la sala  #%%                     # en la sala
1605  #%%                     for i in range(0, cantidad):  #%%                     for i in range(0, cantidad):
1606  #%%                         instancia = self.__personaje.sacar_de_mochila(n_objeto,  #%%                         instancia = self.__personaje.sacar_de_mochila(n_objeto,
1607  #%%                                                                       n_instancia - 1)  #%%                                                                       n_instancia - 1)
1608  #%%                         self.__personaje.sala.dejar_objeto(instancia, dificultad)              #%%                         self.__personaje.sala.dejar_objeto(instancia, dificultad)            
1609  #%%  #%%
1610  #%%                     if dificultad == 0:  #%%                     if dificultad == 0:
1611  #%%                         self.__personaje.actuar("ha dejado " + instancia.nombre)  #%%                         self.__personaje.actuar("ha dejado " + instancia.nombre)
1612  #%%                         self.conn().send("Has dejado " + instancia.nombre, 0)  #%%                         self.conn().send("Has dejado " + instancia.nombre, 0)
1613  #%%                     else:  #%%                     else:
1614  #%%                         self.__personaje.actuar("ha escondido algo")  #%%                         self.__personaje.actuar("ha escondido algo")
1615  #%%                         self.conn().send("Has escondido " + instancia.nombre, 0)  #%%                         self.conn().send("Has escondido " + instancia.nombre, 0)
1616  #%%  #%%
1617  #%%                     if cantidad > 1:  #%%                     if cantidad > 1:
1618  #%%                         self.conn().send(" (" + str(cantidad) + " unidades)")  #%%                         self.conn().send(" (" + str(cantidad) + " unidades)")
1619  #%%                     else:  #%%                     else:
1620  #%%                         self.conn().send("")  #%%                         self.conn().send("")
1621  #%%  #%%
1622  #%%                 break  #%%                 break
1623  #%%                  #%%                
1624  #%%     if encontrados == 0:  #%%     if encontrados == 0:
1625  #%%         self.conn().send("No tienes en la mochila ningún objeto con identificativo " +  #%%         self.conn().send("No tienes en la mochila ningún objeto con identificativo " +
1626  #%%                          id_objeto)  #%%                          id_objeto)
1627  #%%     elif encontrados < n_orden:  #%%     elif encontrados < n_orden:
1628  #%%         self.conn().send("No tienes en la mochila suficientes objetos con identificativo " +  #%%         self.conn().send("No tienes en la mochila suficientes objetos con identificativo " +
1629  #%%                          id_objeto + ", solo tienes " + str(encontrados))  #%%                          id_objeto + ", solo tienes " + str(encontrados))
1630    
1631    
1632      def cmd_esconder(self, id_objeto, cantidad, n_orden, n_instancia):      def cmd_esconder(self, id_objeto, cantidad, n_orden, n_instancia):
1633          try:          try:
1634    
1635              #%% aqui faltaría lo del sigilo...              #%% aqui faltaría lo del sigilo...
1636              nombre = self.__personaje.esconder(id_objeto, cantidad, n_orden, n_instancia)              nombre = self.__personaje.esconder(id_objeto, cantidad, n_orden, n_instancia)
1637    
1638              self.conn().send("Has escondido " + nombre, 0)              self.conn().send("Has escondido " + nombre, 0)
1639              if cantidad > 1:              if cantidad > 1:
1640                  self.conn().send(" (" + str(cantidad) + " unidades)")                  self.conn().send(" (" + str(cantidad) + " unidades)")
1641              else:              else:
1642                  self.conn().send("")                  self.conn().send("")
1643    
1644          except ExcepcionDeJuego, mensaje:          except ExcepcionDeJuego, mensaje:
1645    
1646              self.conn().send(str(mensaje))              self.conn().send(str(mensaje))
1647    
1648    
1649      def cmd_dar(self, id_receptor, id_objeto, cantidad, n_orden, n_instancia):      def cmd_dar(self, id_receptor, id_objeto, cantidad, n_orden, n_instancia):
1650          encontrados = 0          encontrados = 0
1651          n_objeto = -1          n_objeto = -1
1652    
1653          # Buscar el id_receptor en la sala actual.          # Buscar el id_receptor en la sala actual.
1654          if self.__personaje.sala != None:          if self.__personaje.sala != None:
# Line 1646  class DialogoNormal(Dialogo): Line 1662  class DialogoNormal(Dialogo):
1662                  self.conn().send('No hay nadie aquí que se llame '+id_receptor)                  self.conn().send('No hay nadie aquí que se llame '+id_receptor)
1663                  return                  return
1664                            
1665          # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,          # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,
1666          # discriminamos con el parametro n_orden.          # discriminamos con el parametro n_orden.
1667          for instancias in self.__personaje.mochila:          for instancias in self.__personaje.mochila:
1668              n_objeto = n_objeto + 1              n_objeto = n_objeto + 1
1669              if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):              if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):
1670                  encontrados = encontrados + 1                  encontrados = encontrados + 1
1671                  if encontrados == n_orden:                  if encontrados == n_orden:
1672    
1673                      # Hemos encontrado el objeto, ahora vemos si hay instancias                      # Hemos encontrado el objeto, ahora vemos si hay instancias
1674                      # suficientes.                      # suficientes.
1675                      if (n_instancia + cantidad - 1) > len(instancias):                      if (n_instancia + cantidad - 1) > len(instancias):
1676                          self.conn().send("No tienes " + str(n_instancia + cantidad - 1) +                          self.conn().send("No tienes " + str(n_instancia + cantidad - 1) +
1677                                           " unidades de ese objeto en la mochila, solo tienes " +                                           " unidades de ese objeto en la mochila, solo tienes " +
1678                                           str(len(instancias)))                                           str(len(instancias)))
1679                      else:                      else:
1680                          #Comprobar antes de seguir que el personaje que da el objeto se encuentra                          #Comprobar antes de seguir que el personaje que da el objeto se encuentra
1681                          #en la lista de confianza del receptor (salvo que el que da sea un Maia...)                          #en la lista de confianza del receptor (salvo que el que da sea un Maia...)
1682    
# Line 1674  class DialogoNormal(Dialogo): Line 1690  class DialogoNormal(Dialogo):
1690                                  self.__personaje.actuar_individual(receptor, "te ha intentado dar " + id_objeto + " pero te has negado.")                                  self.__personaje.actuar_individual(receptor, "te ha intentado dar " + id_objeto + " pero te has negado.")
1691                                  break                                  break
1692                                                    
1693                          # Todo ok: sacamos las instancias de la mochila                          # Todo ok: sacamos las instancias de la mochila
1694                          for i in range(0, cantidad):                          for i in range(0, cantidad):
1695                              instancia = self.__personaje.sacar_de_mochila(n_objeto,                              instancia = self.__personaje.sacar_de_mochila(n_objeto,
1696                                                                            n_instancia - 1)                                                                            n_instancia - 1)
1697                              receptor.meter_en_mochila(instancia)                              receptor.meter_en_mochila(instancia)
1698    
1699                          #mensajes                          #mensajes
1700                          self.__personaje.actuar("ha dado " + instancia.nombre + " a " + receptor.nombre)                          self.__personaje.actuar("ha dado " + instancia.nombre + " a " + receptor.nombre)
1701                          self.conn().send("Has dado " + instancia.nombre + " a " + receptor.nombre, 0)                          self.conn().send("Has dado " + instancia.nombre + " a " + receptor.nombre, 0)
1702                          self.__personaje.actuar_individual(receptor, "te ha dado " + instancia.nombre +' ('+str(cantidad)+' unidad[es])')                          self.__personaje.actuar_individual(receptor, "te ha dado " + instancia.nombre +' ('+str(cantidad)+' unidad[es])')
1703                          if cantidad > 1:                          if cantidad > 1:
1704                              self.conn().send(" (" + str(cantidad) + " unidades)")                              self.conn().send(" (" + str(cantidad) + " unidades)")
1705                          else:                          else:
1706                              self.conn().send("")                              self.conn().send("")
1707    
1708                      break                      break
1709                                            
1710          if encontrados == 0:          if encontrados == 0:
1711              self.conn().send("No tienes en la mochila ningún objeto con identificativo " +              self.conn().send("No tienes en la mochila ningún objeto con identificativo " +
1712                               id_objeto)                               id_objeto)
1713          elif encontrados < n_orden:          elif encontrados < n_orden:
1714              self.conn().send("No tienes en la mochila suficientes objetos con identificativo " +              self.conn().send("No tienes en la mochila suficientes objetos con identificativo " +
1715                               id_objeto + ", solo tienes " + str(encontrados))                               id_objeto + ", solo tienes " + str(encontrados))
1716    
1717    
1718  #%%    def cmd_dejar(self, nombre_objeto, cantidad, accion = "dejado",dif=0):  #%%    def cmd_dejar(self, nombre_objeto, cantidad, accion = "dejado",dif=0):
# Line 1715  class DialogoNormal(Dialogo): Line 1731  class DialogoNormal(Dialogo):
1731    
1732    
1733      def cmd_comer(self, id_objeto, n_orden, n_instancia):      def cmd_comer(self, id_objeto, n_orden, n_instancia):
1734          self.__personaje.comer(id_objeto, n_orden, n_instancia)          self.__personaje.comer(id_objeto, n_orden, n_instancia)
1735    
1736    
1737      def cmd_beber(self, id_objeto, n_orden, n_instancia):      def cmd_beber(self, id_objeto, n_orden, n_instancia):
1738          self.__personaje.beber(id_objeto, n_orden, n_instancia)          self.__personaje.beber(id_objeto, n_orden, n_instancia)
1739    
1740                    
1741      def cmd_usar(self, id_objeto, n_orden, n_instancia):      def cmd_usar(self, id_objeto, n_orden, n_instancia):
1742          self.__personaje.usar(id_objeto, n_orden, n_instancia)          self.__personaje.usar(id_objeto, n_orden, n_instancia)
1743    
1744                    
1745      def cmd_usar_con(self, id_objeto, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2):      def cmd_usar_con(self, id_objeto, n_orden, n_instancia, id_objeto2, n_orden2, n_instancia2):
1746          self.__personaje.usar_con(id_objeto, n_orden, n_instancia,          self.__personaje.usar_con(id_objeto, n_orden, n_instancia,
1747                                    id_objeto2, n_orden2, n_instancia2)                                    id_objeto2, n_orden2, n_instancia2)
1748    
1749  #%%     encontrados = 0  #%%     encontrados = 0
1750  #%%     n_objeto = -1  #%%     n_objeto = -1
1751  #%%  #%%
1752  #%%     # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,  #%%     # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,
1753  #%%     # discriminamos con el parametro n_orden.  #%%     # discriminamos con el parametro n_orden.
1754  #%%     for instancias in self.__personaje.mochila:  #%%     for instancias in self.__personaje.mochila:
1755  #%%         n_objeto = n_objeto + 1  #%%         n_objeto = n_objeto + 1
1756  #%%         if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):  #%%         if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre):
1757  #%%             encontrados = encontrados + 1  #%%             encontrados = encontrados + 1
1758  #%%             if encontrados == n_orden:  #%%             if encontrados == n_orden:
1759  #%%  #%%
1760  #%%                 # Hemos encontrado el objeto, ahora vemos si hay instancias  #%%                 # Hemos encontrado el objeto, ahora vemos si hay instancias
1761  #%%                 # suficientes.  #%%                 # suficientes.
1762  #%%                 if (n_instancia) > len(instancias):  #%%                 if (n_instancia) > len(instancias):
1763  #%%                     self.conn().send("No tienes " + str(n_instancia) +  #%%                     self.conn().send("No tienes " + str(n_instancia) +
1764  #%%                                      " instancias de ese objeto en la mochila, solo tienes " +  #%%                                      " instancias de ese objeto en la mochila, solo tienes " +
1765  #%%                                      str(len(instancias)))  #%%                                      str(len(instancias)))
1766  #%%                 else:  #%%                 else:
1767  #%%  #%%
1768  #%%                     # Todo ok: usamos la instancia  #%%                     # Todo ok: usamos la instancia
1769  #%%                     instancia = instancias[n_instancia - 1]  #%%                     instancia = instancias[n_instancia - 1]
1770  #%%  #%%
1771  #%%                     if not instancia.puede_usar(self.__personaje):  #%%                     if not instancia.puede_usar(self.__personaje):
1772  #%%                         self.conn().send("No puedes usar este objeto.")  #%%                         self.conn().send("No puedes usar este objeto.")
1773  #%%                     else:  #%%                     else:
1774  #%%                         instancia.usar(self.__personaje)  #%%                         instancia.usar(self.__personaje)
1775  #%%                                        #%%                                      
1776  #%%        #self.conn().send("Aún no se pueden usar objetos...")  #%%        #self.conn().send("Aún no se pueden usar objetos...")
1777  #%%        #if nombre_objeto == "":  #%%        #if nombre_objeto == "":
1778  #%%        #    self.conn.send("Debes especificar un objeto")  #%%        #    self.conn.send("Debes especificar un objeto")
# Line 1770  class DialogoNormal(Dialogo): Line 1786  class DialogoNormal(Dialogo):
1786    
1787    
1788      def cmd_poner(self, posicion, id_objeto, n_orden, n_instancia):      def cmd_poner(self, posicion, id_objeto, n_orden, n_instancia):
1789          self.__personaje.ponerse(posicion, id_objeto, n_orden, n_instancia)          self.__personaje.ponerse(posicion, id_objeto, n_orden, n_instancia)
1790    
1791    
1792      def cmd_quitar(self, posicion):      def cmd_quitar(self, posicion):
1793          self.__personaje.quitarse(posicion)          self.__personaje.quitarse(posicion)
1794    
1795    
1796      def cmd_examinar(self, id_objeto, n_orden, n_instancia):      def cmd_examinar(self, id_objeto, n_orden, n_instancia):
1797          encontrados = 0          encontrados = 0
1798          n_objeto = -1          n_objeto = -1
1799    
1800          # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,          # Buscar el objeto en la mochila. Puede que haya varios con el mismo identificativo,
1801          # discriminamos con el parametro n_orden.          # discriminamos con el parametro n_orden.
# Line 1850  class DialogoNormal(Dialogo): Line 1866  class DialogoNormal(Dialogo):
1866    
1867      def cmd_observar(self, nombre_oponente):      def cmd_observar(self, nombre_oponente):
1868    
1869          encontrado = 0          encontrado = 0
1870          for oponente in self.__personaje.sala.personajes.values():          for oponente in self.__personaje.sala.personajes.values():
1871              print oponente.id, oponente.nombre              print oponente.id, oponente.nombre
1872              if isinstance(oponente, PersonajeJugador):              if isinstance(oponente, PersonajeJugador):
1873                  nombre = oponente.id                  nombre = oponente.id
1874              else:              else:
1875                  nombre = oponente.nombre                  nombre = oponente.nombre
1876    
1877              if normalizar_id(nombre_oponente) == extraer_id(nombre):              if normalizar_id(nombre_oponente) == extraer_id(nombre):
1878                 encontrado = 1                 encontrado = 1
1879                 break                 break
1880    
1881          if encontrado == 0:          if encontrado == 0:
1882              self.conn().send("Aquí no hay nadie llamado " + nombre_oponente)              self.conn().send("Aquí no hay nadie llamado " + nombre_oponente)
1883              return              return
1884    
1885          result = self.__personaje.comparar(oponente)          result = self.__personaje.comparar(oponente)
1886    
1887          if result == Personaje.COMP_INF_MAS_FUERTE:          if result == Personaje.COMP_INF_MAS_FUERTE:
1888              adjetivo = "infinitamente más fuerte"              adjetivo = "infinitamente más fuerte"
# Line 1902  class DialogoNormal(Dialogo): Line 1918  class DialogoNormal(Dialogo):
1918                    
1919    
1920      def cmd_seguir(self, id_lider):      def cmd_seguir(self, id_lider):
1921          if not self.__personaje.sala.personajes.has_key(id_lider):          if not self.__personaje.sala.personajes.has_key(id_lider):
1922              self.conn().send('Aqui no hay nadie llamado ' + id_lider)              self.conn().send('Aqui no hay nadie llamado ' + id_lider)
1923          else:          else:
1924              if self.__personaje.anterior != None:              if self.__personaje.anterior != None:
1925                  self.conn().send('Ya no estas siguiendo a ' + self.__personaje.anterior.id)                  self.conn().send('Ya no estas siguiendo a ' + self.__personaje.anterior.id)
1926                  self.__personaje.no_seguir()                  self.__personaje.no_seguir()
1927    
1928              lider = self.__personaje.sala.personajes[id_lider]              lider = self.__personaje.sala.personajes[id_lider]
1929              self.__personaje.seguir(lider)              self.__personaje.seguir(lider)
1930              self.conn().send('Ahora estas siguiendo a ' + lider.id)              self.conn().send('Ahora estas siguiendo a ' + lider.id)
1931                                                    
1932    
1933      def cmd_no_seguir(self):      def cmd_no_seguir(self):
1934          if self.__personaje.anterior == None:          if self.__personaje.anterior == None:
1935              self.conn().send('¡No estabas siguiendo a nadie!')              self.conn().send('¡No estabas siguiendo a nadie!')
1936          else:          else:
1937              self.conn().send('Ya no estas siguiendo a ' + self.__personaje.anterior.id)              self.conn().send('Ya no estas siguiendo a ' + self.__personaje.anterior.id)
1938              self.__personaje.no_seguir()              self.__personaje.no_seguir()
1939    
1940    
1941      def cmd_ip(self):      def cmd_ip(self):
1942          self.conn().send('Estás conectado desde la dirección ' + self.conn().ip)          self.conn().send('Estás conectado desde la dirección ' + self.conn().ip)
1943    
1944    
1945      def cmd_area(self):      def cmd_area(self):
1946          self.conn().send('Estás en el área ' + self.__personaje.sala.area)          self.conn().send('Estás en el área ' + self.__personaje.sala.area)
1947    
1948                                                    
1949      def cmd_atacar(self, nombre_oponente):      def cmd_atacar(self, nombre_oponente):
# Line 1962  class DialogoNormal(Dialogo): Line 1978  class DialogoNormal(Dialogo):
1978    
1979    
1980      def cmd_reloj(self):      def cmd_reloj(self):
1981          ahora = FechaHoraMine_ahora()          ahora = FechaHoraMine_ahora()
1982          self.conn().send("%s (%s)" % (str(ahora), ahora.desc_seccion()))          self.conn().send("%s (%s)" % (str(ahora), ahora.desc_seccion()))
1983    
1984                            
1985  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
1986    
1987  if (__name__ == '__main__'):  if (__name__ == '__main__'):

Legend:
Removed from v.2.27  
changed lines
  Added in v.2.28

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