CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 16 Jul 2020 05:55

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: 28 Jun 2010 15:13 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Le estoy dando vueltas al tema...

Código:
>Llama a la puerta
LLamas a la puerta pero parece que nadie te ha escuchado.
>Vuelve a llamar.



Por supuesto no lo interpreta bien pero... ¿habría algún modo de que lo entendiera?
Ahí hay dos verbo, aunque por posición el parser solo reconocerá uno.
Pero sí podría interpretar los argumentos de una forma especial siempre que el verbo sea volver ¿no?

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


Arriba
 Perfil  
 
NotaPublicado: 28 Jun 2010 15:35 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
El comando "volver" existe por defecto en AGE, como verbo a secas, "volver", que vuelve a la localidad de la que has venido. Pero por supuesto, lo puedes redefinir para que haga otras cosas, como todo.

Qué tal si haces algo así en el parseCommand sin objetos del mundo:

Código:
if ( equals(verb,"volver") )
{
  if ( args.toLowerCase().startsWith("a ") )
  {
     jugador.forceCommand( args.substring(2) );
     end();
  }
}


args.substring(2) significa la cadena args menos los dos primeros caracteres. O sea, que si args es "a llamar", args.substring(2) sería "llamar", con lo cual en la práctica estarías ignorando "vuelve a" y haciendo que llamara (o que hiciera el verbo que viene después).

Puedes hacer cosas más avanzadas como buscar verbos en la cadena, dime si te llega esto o quieres más pistas. Yo creo que esto debería valer en el 99% de los casos, sólo haría falta alguna solución más compleja si quisieras cosas como "vuelve cuidadosamente a llamar".

_________________
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: 28 Jun 2010 15:57 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Puedes hacer cosas más avanzadas como buscar verbos en la cadena, dime si te llega esto o quieres más pistas. Yo creo que esto debería valer en el 99% de los casos, sólo haría falta alguna solución más compleja si quisieras cosas como "vuelve cuidadosamente a llamar".


No, con esto me vale muchas gracias. :D
La verdad es que empiezo a dudar de que haya algo que no se pueda hacer con AGE. :)

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


Arriba
 Perfil  
 
NotaPublicado: 06 Ene 2011 19:14 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
El comando "volver" existe por defecto en AGE, como verbo a secas, "volver", que vuelve a la localidad de la que has venido. Pero por supuesto, lo puedes redefinir para que haga otras cosas, como todo.

Qué tal si haces algo así en el parseCommand sin objetos del mundo:

Código:
if ( equals(verb,"volver") )
{
  if ( args.toLowerCase().startsWith("a ") )
  {
     jugador.forceCommand( args.substring(2) );
     end();
  }
}


args.substring(2) significa la cadena args menos los dos primeros caracteres. O sea, que si args es "a llamar", args.substring(2) sería "llamar", con lo cual en la práctica estarías ignorando "vuelve a" y haciendo que llamara (o que hiciera el verbo que viene después).

Puedes hacer cosas más avanzadas como buscar verbos en la cadena, dime si te llega esto o quieres más pistas. Yo creo que esto debería valer en el 99% de los casos, sólo haría falta alguna solución más compleja si quisieras cosas como "vuelve cuidadosamente a llamar".



Vuelvo a este hilo porque "volver" me sigue dando problemas.
Esta solución que diste sirve para volver a hacer algo, pero no para volver a una localidad.

>Volver al torreón
No ves el modo de volver...

¿No se podría hacer algo para que por defecto cuando el jugador escribiera algo del tipo "volver a objeto instance of room" se convirtiera en "ir a room" ?

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


Arriba
 Perfil  
 
NotaPublicado: 06 Ene 2011 19:21 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
¿No se podría hacer algo para que por defecto cuando el jugador escribiera algo del tipo "volver a objeto instance of room" se convirtiera en "ir a room" ?

No hace falta porque es que por defecto ya hace básicamente eso... si ahora no lo hace en tu aventura es porque lo redefiniste tú... :D

Para que "volver" sirva a la vez para volver a una localidad y a la vez volver a llevar a cabo una acción anterior, tendrás que detectar si los args se refieren o no a una salida (Path) de la habitación actual.

Esto se haría tal como te pegué una vez que me preguntaste cómo hacer "empujar <cosa> hacia <localidad>", o algo así, creo que deberías tenerlo por ahí.

_________________
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: 06 Ene 2011 20:02 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
jenesis escribió:
¿No se podría hacer algo para que por defecto cuando el jugador escribiera algo del tipo "volver a objeto instance of room" se convirtiera en "ir a room" ?


No hace falta porque es que por defecto ya hace básicamente eso... si ahora no lo hace en tu aventura es porque lo redefiniste tú... :D

Para que "volver" sirva a la vez para volver a una localidad y a la vez volver a llevar a cabo una acción anterior, tendrás que detectar si los args se refieren o no a una salida (Path) de la habitación actual.

Esto se haría tal como te pegué una vez que me preguntaste cómo hacer "empujar <cosa> hacia <localidad>", o algo así, creo que deberías tenerlo por ahí.


He encontrado el hilo :
viewtopic.php?f=31&t=3895&p=46036&hilit=empujar#p46036

No recuerdo bien por qué no llegué a aplicarlo. :roll:

Lo que sí apliqué fue esto:

Código:
if (equals(verb,"volver"))
  {
    if ( args.toLowerCase().startsWith("a ") )
       {
          mobile("guerrero").forceCommand( args.substring(2) );


Es un código que tú me pasaste y que se suponía cubría el problema de repetición de una acción. No se habló entonces nada de la posibilidad de escribir "volver a localidad", y queda claro que para ese caso no sirve. Tampoco sirve para los casos en que se teletransporta al jugador y tampoco para volver un objeto, si bien eso se arregla capturando la acción desde ese objeto.
Voy a ver si consigo que "volver" funcione bien en todos los casos. :D

PD: Por cierto, otra respuesta que no está en messages.lan "No ves el modo de volver..."

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


Arriba
 Perfil  
 
NotaPublicado: 06 Ene 2011 21:55 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
jenesis escribió:

No recuerdo bien por qué no llegué a aplicarlo. :roll:


En aquella ocasión lo podría haber usado ya que se trataba de teletransportar al jugador y objeto a "destination". En este caso no me vale, porque "destination" es el nombre único de la localidad, y no siempre coincide con el de referencia. Sé que había por hay otro bucle que sacaba los nombres de referencia de un objeto, miraré de añadirlo, pero a este paso voy a llegar al medio mega de código. :lol:

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


Arriba
 Perfil  
 
NotaPublicado: 06 Ene 2011 22:49 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
En aquella ocasión lo podría haber usado ya que se trataba de teletransportar al jugador y objeto a "destination". En este caso no me vale, porque "destination" es el nombre único de la localidad, y no siempre coincide con el de referencia. Sé que había por hay otro bucle que sacaba los nombres de referencia de un objeto, miraré de añadirlo, pero a este paso voy a llegar al medio mega de código. :lol:


Bueno, es normal, eres perfeccionista y quieres que cada verbo se comporte exactamente como tú quieres, y eso requiere código.

Puedes ver si los argumentos se corresponden con el nombre de alguna salida así:

Código:
boolean matchea = false;
Path[] ps = habitacion.getValidExits();
for ( int i = 0 ; i < ps.length ; i++ )
{
  if ( ps[i].matchExitCommand(args) )
  {
     matchea = true;
  }
}


Luego puedes hacer que si matchea es false, se llame al código de volver a realizar una acción, y si es true, se llame a "ir " + args, por ejemplo.

_________________
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  [ 8 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 3 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