CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 14 Dic 2018 05:27

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 38 mensajes ]  Ir a página 1, 2, 3  Siguiente
Autor Mensaje
NotaPublicado: 17 Jul 2009 11:17 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
¿Podrías explicarme la sintaxis del método onGet()?

Quiero suarlo para que despues de la acción por defecto se imprima un mensaje y se cambien ciertos valores, pero no atino con el modo de escribirlo, y no lo he encontrado en el listado de referencia, así que tampoco puede ver los parámetros.

Un saludo



Editado para cambiar el asunto del hilo.


Última edición por jenesis el 17 Feb 2010 14:29, editado 1 vez en total

Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Jul 2009 11:27 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
No sale en la lista de referencia porque sólo hice lista de los métodos disponibles para que el creador de aventuras los llame, no de los que son para redefinirlos.

La declaración es:

void onGet ( Mobile getter )

donde lo defines en la cosa que estás cogiendo (o sea, self es la cosa cogida) y getter es la criatura que coge la cosa.

También lo tienes en los menús: "Insertar código - Eventos de cosa - Al coger esta cosa".

Fíjate que este método es un evento, así que sólo se ejecutará si la criatura realmente tiene éxito cogiendo la cosa. Es decir, si has puesto algún parseCommand con un end() que haga que no se llegue a coger, el método ya no se ejecutaría. (te lo digo porque como creo que aún no has usado mucho los eventos, igual esto te podría despistar).

_________________
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  
 
 Asunto:
NotaPublicado: 17 Jul 2009 11:44 
Desconectado
xyzzy

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

La declaración es:

void onGet ( Mobile getter )



Vaya... solo funciona con la acción coger, lo tenía en mis apuntes pero con una definición incorrecta, yo pensaba que era algo que se ejecutaba cuando una acción cualquiera tenía éxito.
Mi intención es que después de meter un objeto dentro de otro, automaticamente se imprima un mensaje, el problema es que si lo hago con un parserCommand, primero se imprime mi mensaje y luego el del sistema, lo cual estropea por completo la escena.

Mirando más en mis apuntes he encontrado este otro, "before_do_get", pero no tengo más anotaciones ¿es sólo también para la acción "coger"?

Un saludo
Jen


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Jul 2009 16:20 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Jenesis escribió:
Vaya... solo funciona con la acción coger, lo tenía en mis apuntes pero con una definición incorrecta, yo pensaba que era algo que se ejecutaba cuando una acción cualquiera tenía éxito.


No, los eventos son métodos que se ejecutan cuando sucede algo en el mundo (por ejemplo, una acción realizada con éxito); pero cada suceso o acción tiene su propio evento, no hay un evento general que valga para todo (tampoco sería muy útil porque no te permitiría discriminar mucho). Así, tienes un evento para cuando alguien coge una cosa, para cuando alguien entra en un habitación, etc.

¿Lo que necesitas es un evento para cuando alguien pone una cosa dentro de un contenedor, como en "poner la espada en el baúl"? Si es así, ahora mismo no hay evento para esto, porque ya sabes que no me he centrado mucho en contenedores al no usarlos. Pero puedo implementar este evento, añadir un evento para una acción es algo muy sencillo que no me lleva ni cinco minutos. Si efectivamente eso es lo que quieres, te puedo mandar esta tarde una versión con ello.

_________________
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  
 
 Asunto:
NotaPublicado: 17 Jul 2009 16:43 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
¿Lo que necesitas es un evento para cuando alguien pone una cosa dentro de un contenedor, como en "poner la espada en el baúl"? Si es así, ahora mismo no hay evento para esto, porque ya sabes que no me he centrado mucho en contenedores al no usarlos. Pero puedo implementar este evento, añadir un evento para una acción es algo muy sencillo que no me lleva ni cinco minutos. Si efectivamente eso es lo que quieres, te puedo mandar esta tarde una versión con ello.


O eso, o me dices cómo hacer para que la respuesta por defecto no se imprima después del contenido del parserCommand.
También me serviría enmudecer al parser, del mismo modo que hicimos con el tema de la ropa ¿te acuerdas?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Jul 2009 17:28 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
jenesis escribió:
O eso, o me dices cómo hacer para que la respuesta por defecto no se imprima después del contenido del parserCommand.
También me serviría enmudecer al parser, del mismo modo que hicimos con el tema de la ropa ¿te acuerdas?


Bueno, he estado pensando un rato porque es muy fácil implementar algo que haga lo que tú pides, pero por supuesto me gustaría que ese algo fuera lo suficientemente general para ser útil en más situaciones y a más gente (o a ti misma en otros casos futuros).

Ahora mismo, la secuencia de cosas cuando llevas a cabo una acción (si no la has interceptado antes con un parseCommand o similar), es: se ejecuta la acción, se imprimen los mensajes por defecto, y luego se lanzan los eventos.

Una cosa que pensé es hacer que los eventos, que actualmente se ejecutan después de que se ejecute una acción y se imprima el mensaje por defecto correspondiente, se ejecuten *entre* la ejecución de la acción y la impresión del mensaje. Así, podrías no imprimir el mensaje (o cambiarlo) con un end().

El problema de esta opción es que no permite ejecutar eventos que verdaderamente sean "respuesta" a algo que haces, es decir: "Coges la estatuilla del pedestal. ¡En ese momento se activa una trampa!", porque el evento (la activación de la trampa) se ejecutaría antes de imprimir el mensaje.

Así que veo varias opciones:

- Que haya dos tipos de evento, unos que vayan antes de imprimir el mensaje (y por lo tanto, permitan cambiarlo) y otros que vayan después (y por lo tanto, permitan programar acciones en respuesta a ésa). Así pues, tú en este caso usarías el primer tipo, pero si quisieras programar una reacción a tu acción usarías el segundo.

Alternativamente, también podría ser un mismo evento, con un parámetro true o false que te diga si estás antes o después.

O bien:

- Que haya un tipo de evento como hasta ahora, y que haya un método específico para la impresión del mensaje.

¿Qué os parecen esas opciones? Yo casi estoy por la primera que me parece un poco más genérica, pero me gustaría tener alguna opinió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  
 
 Asunto:
NotaPublicado: 17 Jul 2009 17:47 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Claro, es que luego también está la cosa de que una cosa es querer cambiar la respuesta por defecto para una acción cuando se realiza sobre un objeto concreto, y otra cambiarla en general. Por ejemplo, para el "get" lo hice en general para hacer que el peso sea configurable. Igual hacen falta los dos tipos de mecanismo.

¿En este caso, tú quieres cambiar la respuesta en todos los casos o sólo para un objeto?

_________________
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  
 
 Asunto:
NotaPublicado: 17 Feb 2010 14:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Claro, es que luego también está la cosa de que una cosa es querer cambiar la respuesta por defecto para una acción cuando se realiza sobre un objeto concreto, y otra cambiarla en general. Por ejemplo, para el "get" lo hice en general para hacer que el peso sea configurable. Igual hacen falta los dos tipos de mecanismo.

¿En este caso, tú quieres cambiar la respuesta en todos los casos o sólo para un objeto?


Yo prefiero tener la libertad de elegir en cada caso el mensaje para cada acción, por ejemplo para la acción coger veo normal escribir un mensaje en caso de que la acción no tenga éxito, pero no tanto en el caso de que sí, a no ser que esa acción provoque alguna reacción que sea relevante mencionar.

En realidad lo único que me molesta es que se imprima ese mensaje, el evento es silencioso y es lógico que tenga lugar en primer lugar ya que lo demás que suceda siempre será consecuencia del mismo.


Arriba
 Perfil  
 
NotaPublicado: 17 Feb 2010 14:28 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
No sé muy bien lo que he hecho pero algo he hecho. :lol:
Al parecer he reactivado este hilo que parece que se quedó un poco en el aire.

Como era de lo que quería hablar, aprovecho para preguntar de nuevo por un modo de evitar o saltarse esas respuestas que el parser escribe cuando una acción tiene éxito, como por ejemplo la de coger un objeto. No solo hemos hablado de esto en este hilo, he estado mirando por ahí y es un tema recurrente, pero no recuerdo si al final me dijiste cómo hacer que el parser enmudeciera.
Yo prefiero mis propias respuestas a cualquier acción, incluso a aquellas que el parser no comprende, porque es el único modo de personalizar un parser y que la aventura no se parezca a otras tantas que haya por ahí.

¿Había algún modo de hacerlo?


Arriba
 Perfil  
 
NotaPublicado: 17 Feb 2010 15:12 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
De momento hay modo de hacerlo para algunas, no para todas, hay mensajes que aún no son configurables. Con el tiempo espero ir haciéndolos todos configurables.

(por supuesto, incluso los mensajes que no son configurables se pueden "configurar" sustituyendo la acción en sí, pero claro, esto no es cómodo).

_________________
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 Feb 2010 15:48 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
De momento hay modo de hacerlo para algunas, no para todas, hay mensajes que aún no son configurables. Con el tiempo espero ir haciéndolos todos configurables.

(por supuesto, incluso los mensajes que no son configurables se pueden "configurar" sustituyendo la acción en sí, pero claro, esto no es cómodo).


:roll: :roll: :roll: :roll:
Pero me lo contarás ¿verdad? :mrgreen:


Arriba
 Perfil  
 
NotaPublicado: 17 Feb 2010 15:54 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Sí, pero no tengo aquí el AGE y eso necesito mirarlo, porque la verdad es que no me acuerdo de cómo iba.

_________________
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 Feb 2010 19:36 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Sep 2004 12:53
Mensajes: 1142
Aunque el tema viene de viejo esto del tema de los eventos es como los "before" y "after" de Inform ("antes" y "despues" en informATE), que precisamente se usan de la forma que comentabas Al-K* en el mensaje de más arriba.

Te los comento porque sé que no conoces mucho inform y tal vez te puede ayudar ver que otros ya se han pasado lo mismo.

Básicamente con el "before" capturas la acción previamente por lo que te permite decidir si quieres que se llegue a producir o no, emitir mensajes o cambiar la acción por otra.

El "after" se dispara una vez realizada la acción y, además de ejecutar cualquier código posterior que necesites, se usa para elegir si mostrar el mensaje predeterminado de la acción o cambiarlo por otro propio.

PD: No comento mucho, pero que conste que sigo vuestras charlas por aquí con muchísimo interés :)

_________________
- Lenko -


Arriba
 Perfil  
 
NotaPublicado: 17 Feb 2010 19:50 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
¿O sea que el after se ejecuta después de que se produzca la acción por defecto, pero antes de mostrar el mensaje?

¿Cómo se hace entonces en Inform para hacer algo después de una acción, pero que se muestre el mensaje por defecto igual?

Por ejemplo:

> coger brasas
Cogidas.
¡Ay! ¡Las brasas te queman la mano, provocándote un punto de daño!

_________________
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 Feb 2010 19:57 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 15 Dic 2004 21:28
Mensajes: 2302
Creo recordar que si se devuelve false en ese método, se sigen mostrando los mensajes por defecto. Aunque no sé si el mensaje personalizado se mostraría en el órden que tú has puesto.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 38 mensajes ]  Ir a página 1, 2, 3  Siguiente

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 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