CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 28 Sep 2020 20:55

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 12 Jun 2009 11:17 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
En la entrada del castillo hay unos perros que ladran en caso de que alguien se acerque a la misma, así que he puesto un update que mantiene a los perros ladrando mientras alguien está en la entrada.
Desde el vestíbulo del castillo se oye ladrar a los perros pero no desde más adentro, el caso es que quiero que el update que imprime los ladridos, quier se pare justo al salir del vestíbulo por la puerta sur, y se vuelva a activar al entrar.

Para esto último he usado un onEnter(), pero por alguna razón una vez se para el update no se vuelve a poner en marcha aunque vuelvas a entrar en el vestíbulo.

El caso es que tampoco se muestra un write que he puesto fuera de toda condición en el onEnter.
Creo que algo no he entendido del método onEnter...
Yo pensaba que se ejecutaba cada vez que el personaje entraba por su propio pie en la localidad.
¿no es así?


Arriba
 Perfil  
 
NotaPublicado: 13 Jun 2009 10:36 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
En la entrada del castillo hay unos perros que ladran en caso de que alguien se acerque a la misma, así que he puesto un update que mantiene a los perros ladrando mientras alguien está en la entrada.
Desde el vestíbulo del castillo se oye ladrar a los perros pero no desde más adentro, el caso es que quiero que el update que imprime los ladridos, quier se pare justo al salir del vestíbulo por la puerta sur, y se vuelva a activar al entrar.

Para esto último he usado un onEnter(), pero por alguna razón una vez se para el update no se vuelve a poner en marcha aunque vuelvas a entrar en el vestíbulo.

El caso es que tampoco se muestra un write que he puesto fuera de toda condición en el onEnter.
Creo que algo no he entendido del método onEnter...
Yo pensaba que se ejecutaba cada vez que el personaje entraba por su propio pie en la localidad.
¿no es así?


Sí, es así... mejor que me pongas el código, a ver si veo cuál es el error.

_________________
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: 14 Jun 2009 12:20 
Desconectado
xyzzy

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

Sí, es así... mejor que me pongas el código, a ver si veo cuál es el error.


Nah, tranquilo ha sido un error mío.

Lo que sí me gustaría es saber cómo indicar que se ha tomado una dirección concreta.
Yo estoy usando un contains "dirección", pero me gustaría poner el nombre del objeto o la propiedad que indica la dirección porque así me serviría tanto para el nombre de la dirección como para su alias.


Gracias .
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 14 Jun 2009 15:20 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Lo que sí me gustaría es saber cómo indicar que se ha tomado una dirección concreta.
Yo estoy usando un contains "dirección", pero me gustaría poner el nombre del objeto o la propiedad que indica la dirección porque así me serviría tanto para el nombre de la dirección como para su alias.


En el evento onEnter no se puede saber de forma sencilla, puedes saberlo cuando la criatura está intentando salir de la habitación anterior, mediante el evento beforeExit de dicha habitación:

void beforeExit ( Mobile m , Path p )

El objeto p, de la clase Path, te da el camino que la criatura está usando para salir de la habitación. A continuación puedes hacer p.getExitName() para obtener una cadena que se corresponde con el nombre del camino. En el caso de que el camino tenga tanto una dirección estándar (norte, este, etc.) como unos alias (puerta, túnel, etc.); p.getExitName() siempre te va a devolver el nombre de la dirección estándar, así que puedes compararlo con "norte" o el que corresponda.

Otra alternativa sería jugar con el sistema de propiedades o de relaciones usando una propiedad para almacenar cuál es la última habitación en la que estuvo el jugador; pero creo que es más fácil utilizar el beforeExit como he dicho.

_________________
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: 14 Jun 2009 16:49 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
... puedes saberlo cuando la criatura está intentando salir de la habitación anterior, mediante el evento beforeExit de dicha habitación:

void beforeExit ( Mobile m , Path p )

El objeto p, de la clase Path, te da el camino que la criatura está usando para salir de la habitación. A continuación puedes hacer p.getExitName() para obtener una cadena que se corresponde con el nombre del camino. En el caso de que el camino tenga tanto una dirección estándar (norte, este, etc.) como unos alias (puerta, túnel, etc.); p.getExitName() siempre te va a devolver el nombre de la dirección estándar, así que puedes compararlo con "norte" o el que corresponda.


Gracias, eso era lo que quería, saber a dónde se dirige.

Un saludo
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 16 Jun 2009 14:59 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Me temo que con saber la dirección no es suficiente.
Lo que de verdad serviría es saber que la acción ha tenido éxito...
Bueno también serviría poner un onEnter en la otra localidad pero ya que estamos no me importaría saber lo otro.

Gracias


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 16 Jun 2009 15:22 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Pues me temo que la única forma de saber si el movimiento ha tenido éxito es con un onEnter en la localidad de destino. Cuando una criatura se mueve, primero se lanza el evento beforeExit en la localidad origen, luego se mira si se puede mover realmente (es decir, si la puerta si la hay está abierta, etc.); a continuación la criatura se mueve, y entonces se lanza el evento onEnter en la localidad destino. Aparte de esto, no hay más eventos.

Por lo tanto, si quieres saber a la vez el camino por el que se dirige el jugador y si ha tenido éxito, lo que puedes hacer es guardar el camino en una propiedad en el beforeExit de la localidad origen, y a continuación comprobar dicha propiedad en el onEnter de la localidad destino.

_________________
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: 16 Jun 2009 16:53 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
void onEnterRoom(Mobile aCreature)
{
aCreature.write("Está funcionando el onEnter\n");


}


No funciona y no entiendo la razón.
Está literalmente copiado de otra localidad, en la que sí funciona.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Jun 2009 11:28 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
jenesis escribió:
void onEnterRoom(Mobile aCreature)
{
aCreature.write("Está funcionando el onEnter\n");


}


No funciona y no entiendo la razón.
Está literalmente copiado de otra localidad, en la que sí funciona.


Arreglado. :D
No digo lo que era, que me da vergüenza. :oops:


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 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 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:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM