CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 22 Ago 2017 04:15

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 3 mensajes ] 
Autor Mensaje
NotaPublicado: 08 May 2014 10:40 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Hola de nuevo!

Hasta ahora para mover a los PSI de una habitación a otra, de la habitación A a la habitación B (ambas habitaciones no están conectadas por ningún camino), utilizaba el método.

mobile("manolo").moveTo(room("laHabitacion"));

Para el caso de los PSI que no eran el jugador no tenía ningún problema, o por lo menos a simple vista me ha funcionado bien.

En el caso de PSI jugador no, ya que no aparecía la descripción de la habitación, lo que hacía es:

Código:
mobile("elJugadro").moveTo(room("laHabitacion"));
room("laHabitacion").onEnterRoom(mobile("elJugador");


y en la habitación:

Código:
void onEnterRoom ( Mobile aCreature )
{
    aCreature.writeDescription(self.getDescription(aCreature));       
    aCreature.write("\n");   

}


Ahora repasando la documentación:

http://www.caad.es/aetheria/doc/doku.ph ... _entidades

He visto que está el método para establecer la nueva localidad de un jugador;

Código:
/*clase Mobile*/ void setRoom ( Room newRoom )


Lo he probado, pensando que actuaría igual que si el jugador accediese a la habitación como si entrara por un camino normal. Pero al igual que el método m.moveTo(XX),
coloca al jugador en la habitación por no muestra la descripción, debo luego llamar a onEnterRoom(), y allí dentro hacer lo que necesite que muestre.

En la habitación 1

Código:
/*Método de análisis sintáctico de la entrada en una habitación*/
void parseCommand( Mobile aCreature , String verb , String args )
{

    if (equals (verb, "ir") && args.contains("este"))
    {
        mobile("Yo").setRoom(room("hab2"));
        room("hab2").onEnterRoom(mobile("Yo"));       
        end();
    }

}


En la habitación 2

Código:
void onEnterRoom ( Mobile aCreature )
{
   aCreature.writeDescription(self.getDescription(aCreature));       
   aCreature.write("\n");   
}


¿Existe algún método para "teletransportar" al jugador a una habitación? De tal forma que la entrada a dicha habitación sea como si hubiera accedido por un camino directo. O debo hacer de la forma que he comentado antes.

A simple vista el método ..moveTo.. y ..setRoom... me hacen lo mismo, cual es mejor usar para el caso de los PSI. En el caso de objetos uso .removeItem y .addItem.

¡Gracias de nuevo!

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 08 May 2014 11:02 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
No hay un método que haga lo que tú dices, porque los eventos onEnterRoom (y todo el código de entrar en habitaciones) son precisamente para cuando un personaje entra en una habitación, es decir, entra andando por un camino. Esto tiene varias implicaciones como que los métodos se configuran con información del camino por el que ha entrado (mostrando cosas como "Fulano llega desde el norte" y configurando las descripciones dinámicas), que hay una temporización (pasar de una habitación a otra consume una serie de unidades de tiempo, entre las cuales se van mostrando las descripciones al ritmo necesario - primero se muestra en la habitación origen que Fulanito se va, luego se muestra al propio Fulanito la descripción del camino, luego en el destino Fulanito llega y se le muestra la descripción de la habitación nueva), etc.

Teletransportar a un personaje mediante métodos como setRoom o moveTo es una operación de más bajo nivel, simplemente el personaje desaparece de donde estaba y aparece en la habitación nueva instantáneamente, sin cambios de estado ni nada por el estilo. Pero no se dan las condiciones de un desplazamiento normal (que se produzca a través de un camino de la clase Path, que consuma un tiempo, etc.) así que no se ejecuta el código por defecto de desplazamiento. Para mostrar las descripciones tienes que hacerlo a mano.

Por supuesto, podría haber hecho que se mostrara la descripción de la habitación destino de todas formas... pero no sería lo ideal porque entonces quien NO quisiera mostrarla estaría fastidiado. Lo más flexible es no mostrarla, porque así si quieres la muestras llamando a un método que no haga, y si no no. Lo mismo con los onEnterRoom. Esto te da la posibilidad de ejecutarlos o no.

Una cosa que podrías hacer para que todas esas cosas se ejecuten por defecto sin hacer nada, si el teletransporte se produce siempre entre las mismas habitaciones, es crear un camino entre ellas y que el teletransporte active "ir (nombredecamino)", asegurándote (por ejemplo mediante algún flag) que el camino no se pueda usar de ninguna otra manera.

Si no, para teletransporte arbitrario, lo que puedes hacer es hacerte tú una función que te mueva el personaje y además te muestre la descripción de la habitación destino, y luego llamar a esa función cuando quieras.

Sobre moveTo vs. setRoom, en general moveTo es más sencillo de usar pero siempre es más ineficiente. Si no tienes problema en usar setRoom, siempre es más recomendable.

_________________
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: 08 May 2014 14:22 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Vale explicado así le ves sentido. Haré lo que me comentas...

Al-Khwarizmi escribió:

Si no, para teletransporte arbitrario, lo que puedes hacer es hacerte tú una función que te mueva el personaje y además te muestre la descripción de la habitación destino, y luego llamar a esa función cuando quieras.

Sobre moveTo vs. setRoom, en general moveTo es más sencillo de usar pero siempre es más ineficiente. Si no tienes problema en usar setRoom, siempre es más recomendable.


¡Gracias!

_________________
Te quiero... lo siento Yoda sólo tenemos café.


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