CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 30 Nov 2020 09:25

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
NotaPublicado: 03 Ene 2011 09:26 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Me he dado cuenta que tras un forceCommand, el end() solo tiene efecto para la acción original.
¿Habría algún modo de extender el end() a la acción que ejecuta el forceCommand?

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


Arriba
 Perfil  
 
NotaPublicado: 03 Ene 2011 10:18 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
El end() se comporta siempre igual, tanto con forceCommand() como sin él: cuando se encuentra el end(), lo que se hace es detener la ejecución del comando actual. Y el forceCommand() fuerza a que después se ejecute el comando que tú das.

La verdad es que no entiendo exactamente la pregunta... el end() tiene efecto para el código que se está ejecutando, sin importar de dónde venga esa ejecución (como si fuese un if, un bucle, o cualquier otra construcción que haya en un lenguaje de programación). Si quieres que en la acción forzada también se haga un end(), pones otro end() a su vez en ella... no veo cómo la acción original podría terminar la acción forzada si no sabe en qué punto del código quieres terminarla.

Creo que es mejor que me pongas un ejemplo concreto de lo que quieres hacer para que entienda mejor cuál es el problema.

_________________
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: 03 Ene 2011 12:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
El end() se comporta siempre igual, tanto con forceCommand() como sin él: cuando se encuentra el end(), lo que se hace es detener la ejecución del comando actual. Y el forceCommand() fuerza a que después se ejecute el comando que tú das.


Sí, funciona tal como pensaba.
El caso es que quiero que la acción de ese forceCommand no imprima la frase por defecto, algo que directamente se haría con un end() pero que no sé cómo hacer desde un forceCommand.

Por ejemplo, si quiero que el jugador se ponga algo aunque no lo tenga en su poder, puedo capturar la acción poner y añadir un forceCommand para cogerlo, pero no puedo evitar que se imprima la frase de cuando ya lo ha cogido.
¿Se podría de algún modo?

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


Arriba
 Perfil  
 
NotaPublicado: 03 Ene 2011 12:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
El forceCommand sirve para ejecutar un comando, y lo ejecuta tal cual, lógicamente no tiene manera de analizar el código del comando y distinguir qué partes de él quieres ejecutar (en este caso darle al personaje el objeto) y cuáles no (en este caso imprimir el mensaje).

Sin embargo, puedes hacer esa distinción tú explícitamente. Por ejemplo, se me ocurre que puedes hacer lo siguiente:

Código:
set ( jugador , "forzado" , true );
jugador.forceCommand ( "coger (...)" );
set ( jugador , "forzando" , false );


Y luego en el código del comando coger, miras si estás forzando y en ese caso no muestras mensaje. O bien, si no tienes redefinido el coger, puede ser más fácil de esta manera:

Código:
String mensajeViejo = world.getMessages().getMessage("you.get.item");
world.getMessages().setMessage("you.get.item","");
jugador.forceCommand ( "coger (...") );
world.getMessages().setMessage("you.get.item",mensajeViejo);


Con eso desactivas temporalmente el mensaje por defecto para coger sólo mientras ejecutas el forceCommand.

Por último, una tercera solución válida si tu aventura no confía mucho en la temporización es no usar el forceCommand en absoluto; sino simplemente darle el objeto al jugador y luego dejar que el procesado por defecto se encargue de que éste se lo ponga. En lugar de forzar un comando coger, puedes hacer laPrenda.moveTo(jugador), que tiene el efecto de darle esa prenda al jugador instantáneamente sin mostrar ningún mensaje, y no poner end() para que a continuación el jugador se ponga la prenda. El inconveniente de esta solución es que no hace exactamente lo mismo que lo anterior porque el hecho de coger la prenda y ponérsela sucedería en la misma unidad de tiempo (en lugar de llevar el tiempo de un comando coger + un comando ponerse); pero si en esa parte de tu aventura el tiempo no es muy relevante o no te importa que esto consuma sólo una unidad, creo que es la forma más sencilla de hacerlo.

_________________
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: 03 Ene 2011 15:54 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
puedes hacer laPrenda.moveTo(jugador), que tiene el efecto de darle esa prenda al jugador instantáneamente sin mostrar ningún mensaje, y no poner end() para que a continuación el jugador se ponga la prenda. El inconveniente de esta solución es que no hace exactamente lo mismo que lo anterior porque el hecho de coger la prenda y ponérsela sucedería en la misma unidad de tiempo (en lugar de llevar el tiempo de un comando coger + un comando ponerse); pero si en esa parte de tu aventura el tiempo no es muy relevante o no te importa que esto consuma sólo una unidad, creo que es la forma más sencilla de hacerlo.


Gracias, siempre se aprenden cosas de estos problemas. :)

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


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 5 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 4 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