CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 22 Sep 2019 17:41

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: 26 Ene 2011 12:45 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Este es un fallo que tienen todos los parsers.

Si estás en el corredor y escribes "mirar corredor" ¿por qué automáticamente no se entiende como "mirar"?

Si estás en un sitio y quieres una descripción de él, que cosa más lógica que la respuesta sea la misma para "mirar" y "mirar localidad". ¿no?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 26 Ene 2011 12:53 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5308
Ubicación: Coruña
En el caso de otros sistemas no sé, en el caso del AGE es porque las localidades no tienen nombre de referencia, sólo tienen nombre único. Supongo que en otros sistemas será algo parecido. Es que, en realidad, en muchas aventuras esto liaría más que otra cosa.

De todas formas, el efecto que quieres tú se consigue fácil, basta meterse en el parseCommand del mundo (ya que tiene baja prioridad) y poner algo como:

Código:
if ( equals ( verb , "mirar" ) )
{
  if ( args.toLowerCase().endsWith( aCreature.getRoom().getTitle() ) )
  {
     aCreature.forceCommand("mirar");
     end();
  }
}


No tengo acceso al AGE aquí así que a lo mejor he metido algún gazapo, pero la idea básica es ésa.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 26 Ene 2011 13:42 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:

Código:
if ( equals ( verb , "mirar" ) )
{
  if ( args.toLowerCase().endsWith( aCreature.getRoom().getTitle() ) )
  {
     aCreature.forceCommand("mirar");
     end();
  }
}


No tengo acceso al AGE aquí así que a lo mejor he metido algún gazapo, pero la idea básica es ésa.


Sí, creo que lo has metido. :lol:

Suceden dos cosas principalmente:

En las localidades en las que se ha capturado el verbo "mirar", la descripción se imprime dos veces, una desde la localidad y otra desde el mundo; y si pongo un "end" en la localidad, los objetos y psis de la misma se vuelven invisibles, claro.

Y en aquellas localidades en las que el tittle no coincide con su nombre de referencia o pones algo como ">mirar corredor_este", o no hay nada que ver.

No hay prisa, míralo cuando puedas, o a una mala cambiaré ese forceCommand por un "¿No te basta con el comando mirar?" :lol:

La otra solución, es engorrosa. Ir localidad por localidad, poniendo un componente con el nombre de la propia localidad y que imprima además en todas las condiciones que se dan en la misma, pero si ho hay otra forma lo haré.
Eso sí, a este paso el código va a alcanzar un tamaño cercano al mega. :lol:

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 26 Ene 2011 13:50 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5308
Ubicación: Coruña
jenesis escribió:
En las localidades en las que se ha capturado el verbo "mirar", la descripción se imprime dos veces, una desde la localidad y otra desde el mundo; y si pongo un "end" en la localidad, los objetos y psis de la misma se vuelven invisibles, claro.

Vale, al poner eso no sabía que habías redefinido el "mirar" en localidades (no es que fuese un gazapo, es más bien que estas cosas dependen del contexto, ese código sería válido en general pero no en una aventura donde redefinas el "mirar" sin un end()).

Tienes dos opciones:

1. En lugar de en el parseCommand del mundo, ponerlo en el del jugador, para que coja prioridad máxima.
2. No redefinir "mirar" en las localidades si args no es nulo.

Supongo que la más sencilla es la opción 1.

jenesis escribió:
Y en aquellas localidades en las que el tittle no coincide con su nombre de referencia o pones algo como ">mirar corredor_este", o no hay nada que ver.

Hum, bueno, es que las localidades no tienen nombre de referencia... pero si quieres que se puedan mirar de esta manera... obviamente tendrás que ponerles como nombre único (que es el único nombre que tienen) el nombre por el que quieras que el jugador se pueda referir a ellas.

Si la localidad se llama "corredor_este" y no tiene el nombre "corredor" puesto por ninguna parte, ese código no puede decidir como por arte de magia que quieres referirte a ella como "corredor".

Si no quieres cambiar los nombres únicos, siempre puedes utilizar una propiedad que almacene un nombre para referirse a la localidad, en el caso de que éste no coincida con el nombre único:

Código:
if ( equals ( verb , "mirar" ) )
{
  String nombreLocalidad = get ( aCreature.getRoom() , "miNombreReferencia" );
  if ( nombreLocalidad == null ) nombreLocalidad = aCreature.getRoom().getTitle();
  if ( args.toLowerCase().endsWith( nombreLocalidad ) )
  {
     aCreature.forceCommand("mirar");
     end();
  }
}

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 26 Ene 2011 14:53 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Si no quieres cambiar los nombres únicos, siempre puedes utilizar una propiedad que almacene un nombre para referirse a la localidad...


Bueno, no es capricho, no es tan raro tener en una aventura con dos localidades a las que haya que diferenciar por medio de un adjetivo.
En este caso, al ser un castillo el corredor lo rodea por completo, luego hay un corredor norte, un corredor sur, etc.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 26 Ene 2011 14:57 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5308
Ubicación: Coruña
Ya, si no insinuaba que fuese un capricho, lo de "si no quieres cambiar los nombres únicos" se refería más bien a "si no te viene bien cambiarlos"... entonces, lo de la propiedad te resolverá la papeleta.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM