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.