CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 18 Dic 2018 14:48

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: 17 Ene 2011 17:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Tengo un objeto cuyos nombres de referencia son cajón y asa.
Cuando se tira del asa el cajón se abre y el protagonista se esconde tras un mueble hasta que aparece alguien.

> Tira del asa y escóndete.
Tiras del asa y el cajon se abre mostrando el cofre en su interior.
Te escondes rápidamente bajo la cama y esperas a que entre el cocinero.

Recargamos la partida.

> Abre el cajón y escóndete.
Te escondes rápidamente bajo la cama y esperas a que entre el cocinero.
Tiras del asa y el cajón se abre mostrando el cofre en su interior.

Imagino que la culpa es de un forceCommand que convierte la acción abrir en la acción tirar, poniéndola a la cola a la hora de ejecutarla.
Yo comprendo que los forceCommands pueden ser fuente de muchos problemas, pero si queremos que una acción desemboque en otra no hay otra manera ¿no?

¿Algún consejo?

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


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 18:16 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Hum, eso no debería suceder. No es una feature, es un bug. Las cosas en la partida cargada deberían suceder exactamente en el mismo orden que en la original. De hecho, había un bug con forceCommand + logs pero creía que estaba arreglado:

http://code.google.com/p/aetheria/issues/detail?id=80

Pero se ve que no se arregló del todo.

Pásame el código concreto que provoca ese efecto y cuando tenga tiempo (o sea, por la noche) lo miraré.

_________________
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: 17 Ene 2011 18:34 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Hum, eso no debería suceder. No es una feature, es un bug. Las cosas en la partida cargada deberían suceder exactamente en el mismo orden que en la original. De hecho, había un bug con forceCommand + logs pero creía que estaba arreglado:


No me he explicado bien, lo siento.
No sucede al cargar la partida, la partida la he cargado para volver al punto anterior a la ejecución del comando.


> Tira del asa y escóndete.
Tiras del asa y el cajon se abre mostrando el cofre en su interior.
Te escondes rápidamente bajo la cama y esperas a que entre el cocinero.

> Abre el cajón y escóndete.
Te escondes rápidamente bajo la cama y esperas a que entre el cocinero.
Tiras del asa y el cajón se abre mostrando el cofre en su interior.

Ambos comandos están ejecutados en el mismo punto de la aventura, lo que cambia es que en el primero uso el primer nombre de referencia y en segundo uso el segundo nombre de referencia y el verbo abrir que fuerza un tirar del asa.
Creo que el problema es ese forceCommand cuya acción se pone a la cola por detrás de la de "esconderse" y no se me ocurre un modo de solucionarlo.

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


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 20:48 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
No es que te explicaras mal, fui yo que lo leí con mucha prisa porque sólo tenía dos minutos y no lo entendí bien. Ahora veo lo que dices.

Ahora mismo, forceCommand añade una orden que se ejecuta cuando terminan las pendientes, y eso incluye las dos partes de la conjunción. Pero es cierto que también sería útil dar la posibilidad de forzar una orden antes de que se ejecuten el resto de las pendientes. Me lo apunto como issue y miro a ver cómo se puede hacer... poderse se puede, claro, pero no sé si es uno de esos cambios triviales que se hacen en cuestión de minutos, me parece que no.

_________________
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: 17 Ene 2011 21:14 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
En mi opinión, creo que el funcionamiento más natural para el autor de la aventura es que el forceCommand se ejecute tras la acción actual.
Seguramente, cuando el autor usa esta funcionalidad lo hace pensando que es el curso natural de las cosas, que tras tirar del asa, se debe abrir el cajón... Más grave sería en el caso de que tirar del asa sirva para abrir el paracaidas.... si encolamos la acción de abrir el paracaidas al final, nos estampamos contra el suelo y luego se abriría el paracaidas... lo que sería una muerte ciertamente cómica... :lol:

No se me ocurre ningún caso en el que el autor necesite que una acción desencadenada por otra se ejecutase tras un número de acciones indeterminadas. Pero en este caso, se podría disponer de un forceCommandDelayed o algo así, que tuviese el funcionamiento actual.

O como mucho, si AGE al tratar el input del jugador separa las distintas órdenes (por un lado "tira del asa" y por otro "escóndete"), que desconozco si lo hace así o si lo trata todo junto, yo lo que haría es que el forceCommand encolase las acciones forzadas al final de la órden actual, por si "tira del asa" tuviese varios forceCommands encadenados.

Siempre desde el más desconocimiento absoluto de AGE, pero como buen tertuliano, yo opino de lo que sea... :lol:

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 21:34 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
joruiru escribió:
No se me ocurre ningún caso en el que el autor necesite que una acción desencadenada por otra se ejecutase tras un número de acciones indeterminadas. Pero en este caso, se podría disponer de un forceCommandDelayed o algo así, que tuviese el funcionamiento actual.

Sí que es útil a veces, por ejemplo si quieres encadenar varias acciones:

Código:
fulanito.forceCommand("ir al norte");
fulanito.forceCommand("ir al norte");
fulanito.forceCommand("coger la seta");
fulanito.forceCommand("ir al sur");
fulanito.forceCommand("ir al sur");
fulanito.forceCommand("dar la seta a Pepe");


Pero bueno, está claro que lo de forzar inmediatamente también es útil. Así que mi idea es que se puedan hacer ambas cosas, a elección.

_________________
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: 17 Ene 2011 21:56 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
(Esto es bajo nivel en AGE)

¿pushPropertyToFront y amigos no tienen una similitud funcional con lo que hablais? Si me he dispersado mucho ignoradme, o lo dejamos para otro hilo.


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 21:57 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
joruiru escribió:
En mi opinión, creo que el funcionamiento más natural para el autor de la aventura es que el forceCommand se ejecute tras la acción actual.


No cuando lo que se intenta es que un verbo suplante a otro.
En ese caso lo que se quiere es que la acción definida para ese verbo por defecto se cambie por otra.

Código:
>Tira de la anilla.
Tiras de la anilla, el paracaídas se abre y frena bruscamente tu caída.

>Gira hacia la playa
Diriges tu paracaídas hacia la playa.


Ahora imagina que como "alias" de "tirar de la anilla", he implementado que se desate la misma acción al escribir "abrir paracaídas" y para ello uso un forceCommand.
Si lo escribo por separado no pasa nada.

Código:
>Abre el paracaídas
Tiras de la anilla, el paracaídas se abre y frena bruscamente tu caída.

>Gira hacia la playa
Diriges tu paracaídas hacia la playa.


Pero si en vez de eso escribo un multicomando:

Código:
>Abre el paracaídas y gira hacia la playa
Diriges tu paracaídas hacia la playa.
Tiras de la anilla, el paracaídas se abre y frena bruscamente tu caída.


Lo que ha pasado es que el forceCommand se ha ejecutado después de la segunda acción, con lo cual la secuencia de acciones queda al revés.

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


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 22:24 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Sisisisi... por eso mismo, Jen... es lo mismo que digo yo...

Tu "abrir paracaidas" lo que quiere hacer con el forceCommand es desencadenar un "tirar de la anilla", pero lo quieres ya mismo, antes de que empiece a tratarse la siguiente orden del jugador. Como autora, no quieres que lo haga tras un número indeterminado de órdenes.

Si tenemos 3 unidades de tiempo para abrir el paracaidas antes de que sea demasiado tarde, y escribimos "abrir el paracaidas, girar a la derecha, girar a la derecha, saludar a los espectadores y aterrizar"... como se me abra el paracaidas al final del todo, la hemos armado buena...

Por eso, yo creo que lo mejor es que las acciones encadenadas vayan al final de la orden que se está procesando en ese momento, ya que en órdenes compuestas, el resultado es inesperado, ya que nunca sabemos cuantas va a introducir el jugador. Vamos, es el comportamiento más natural que veo yo.

De todas formas, si podemos elegir si ejecutar las acciones forzadas al final de toda la cola de órdenes a procesar o inmediatamente, sería suficiente, ya que da libertad al programador.

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 23:41 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
joruiru escribió:
De todas formas, si podemos elegir si ejecutar las acciones forzadas al final de toda la cola de órdenes a procesar o inmediatamente, sería suficiente, ya que da libertad al programador.


Sí, creo que sería lo ideal. :)

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


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


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