CAAD
http://foro.caad.es/

Camino Cerrado
http://foro.caad.es/viewtopic.php?f=31&t=5573
Página 1 de 1

Autor:  edlobez [ 20 Mar 2014 07:47 ]
Asunto:  Camino Cerrado

Buenas, suelto aquí la duda que comenté ayer noche por IRC. Se me hizo un poco tarde y tuve que marchar.

Tengo dos habitaciones (A y B), donde sólo se puede pasar de una otra "entrando", y sólo en un sentido, de A->>B.
En Puck he creado una relación estructural de A a B, y con los campos: Dirección estándar <nada> y en comandos personalizados "dentro".

En el código beforeExit de la habítación A:

Código:
void beforeExit ( Mobile aCreature , Path path )
{
    //no puedes entrar hasta que paso cerrado sea false
    if ( path.equals( path.matchExitCommand("dentro") ) ) {
        mobile("jugador").write("\n\nAQUI\n\n");
        if ( get(self, "pasoCerrado" ) ) {
                mobile("jugador").writeDenial("Las llamas te impiden ir por ese camino.\n");
                end();
               } 
     }
   
}


Cuando tecleo el comando ">>entrar", pasa de la habitación A a la B, estando la propiedad pasoCerrado a true.
Como se ve en el código inserté una línea de control: mobile("jugador").write("\n\nAQUI\n\n"); que nunca se me llega a imprimir.

He estado usando el mismo código, pero con más caminos, en otras estancias y funciona perfecto, por ejemplo, en otra estancia tengo;

Código:
void beforeExit ( Mobile aCreature , Path path )
{
    //no puedes salir de la habitación hasta que pasoCerrado==false
    if ( path.equals( self.getExit ( true , Path.WEST ) ) ||  path.matchExitCommand("dentro") ) {
        if ( get(self, "pasoCerrado" ) ) {
                mobile("jugador").write("Te impiden el paso.\n");
                end();
               } 
     }
   
}


Que funciona perfectamente. La única diferencia con la otra estancia es el campo dirección estándar en puck, que una habitación está relleno con "Oeste" (dónde funciona), y en la otra estancia "<nada>" (dónde no funciona).

He probado y colocando en dirección estándar un camino "sur", funciona. Pero el tema es que sólo quiero que funcione entrar. Debo capturar en el parseCommand de la habitación "A", "sur" y caparlo;

Código:
//EN EL parseCommando de la habitación A
if (equals(verb, "ir") && args.contains("sur")) {
         mobile("jugador").writeDenial("Las llamas te impiden ir por ese camino.\n");
         end();
}


No sé si esta será la solución más elegante, pero es lo único que se me ha ocurrido.

Autor:  Al-Khwarizmi [ 20 Mar 2014 17:08 ]
Asunto:  Re: Camino Cerrado

Es que el primer código tiene un despiste.

Pones:

Código:
path.equals( path.matchExitCommand("dentro") )


donde supongo que quieres decir simplemente

Código:
path.matchExitCommand("dentro")


ya que lo primero sería comparar un Path con un booleano (lo cual siempre va a dar false, claro).

Compara con el segundo código que pones donde usas el matchExitCommand directamente como una de las condiciones del if, no lo comparas mediante equals.

Autor:  edlobez [ 20 Mar 2014 22:13 ]
Asunto:  Re: Camino Cerrado

Buff, menudo despiste el mío... sorry.

Ya me funciona como quería, Gracias!

Página 1 de 1 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/