CAAD
http://foro.caad.es/

Comprobación estados "state"
http://foro.caad.es/viewtopic.php?f=31&t=5693
Página 1 de 1

Autor:  edlobez [ 28 Sep 2014 11:30 ]
Asunto:  Comprobación estados "state"

Buenas,

Necesito comprobar que al entrar en determinadas estancias, si está el malo malísimo, el jugador muere. El malo malísimo se mueve de forma aleatoria por cuatro estancias, así que en principio no sabemos en cual de las cuatro estancias está.
Pensaba programarlo en el método void onEnterRoom ( Mobile aCreature ), de tal forma que al entrar el jugador, comprobar si está el malo y mueres, pero creo que podría quedar mejor usando las propiedades "state" y "target" del jugador.
Estaba haciendo pruebas, y mirando en la documentación: http://www.caad.es/aetheria/doc/doku.ph ... _criaturas.
¿Puede que exista un error en la documentación?, en el enlace que pongo aparece:
Código:
 room(get(mobile(“Manolo”),”target”))


Pero me da error, ya que get(mobile("manolo"), "target"), retorna un integer:
Código:
*Offending text: room ( get ( self , "target" ) )
*Message: Sourced file: inline evaluation of: ``update( arg0, arg1);'' : Command not found: room( java.lang.Integer )


Probé el siguiente código:

Código:
void update ( PropertyEntry pe , World w )
{
   
    if ( equals ( get (self,"state") , Mobile.MOVING ) ) {
        if (Debug.evalEnabled) {
            self.write("\n***** Te mueves hacia " +   get (self, "target" )   + "******\n");
        }
    }
}


Y el resultado es:
Código:
>> e

***** Te mueves hacia 10000005******


He probado pensado que get ( mobile("jugador"), "target") retorna un orden en la lista de todas las "room's", y me funciona, pero con una pequeña "ñapa":

Código:
void update ( PropertyEntry pe , World w )
{
    EntityList rs = world.getAllRooms();
   
    if ( equals ( get (self,"state") , Mobile.MOVING ) ) {
        if (Debug.evalEnabled) {
            self.write("\n***** Te mueves hacia " +   rs.get ( get (self, "target" ) - 10000000 ).getUniqueName()   + "******\n");
        }
    }
}


... le tengo que restar 10000000.

¿Es la mejor forma?, ¿cómo evitar es "ñapa"?

Autor:  edlobez [ 28 Sep 2014 12:12 ]
Asunto:  Re: Comprobación estados "state"

Pego como me ha quedado y que por ahora, a no ser que en más pruebas encuentre un error, me funciona.

Código:
void update ( PropertyEntry pe , World w )
{
    EntityList rs = world.getAllRooms();
   
    if ( equals ( get (self,"state") , Mobile.MOVING ) ) {
        // El nombre de la room
        rm = rs.get ( get (self, "target" ) - 10000000 ).getUniqueName();       
        if (Debug.evalEnabled) {
            self.write("\n***** Te mueves hacia " + rm + "******\n");
        }
        // Miramos si la room es próxima al dragon
        if ( get ( room (rm) , "habitacion-dragon" ) != null && get (room (rm), "habitacion-dragon") ) {   
            if (Debug.evalEnabled) {
                self.write ("\n***** Estás próximo al dragón. ******\n");                           
            }
            // Comprobamos si el dragón está en esa estancia
            if ( equals ( mobile("dragon").getRoom(), room ( rm) ) ) {
                if (Debug.evalEnabled) {
                    self.write ("\n***** Entras en la misma estancia que el dragón MUERES *****\n");
                }
            }           
        }
    }
}


*** Edito y pego otra versión tras conversa con dddddd por IRC

Código:
void update ( PropertyEntry pe , World w )
{
    EntityList rs = world.getAllRooms();
   
    if ( equals ( get (self,"state") , Mobile.MOVING ) ) {
        // El nombre de la room
        rm = world.getRoom( get (self, "target" ) );     
        if (Debug.evalEnabled) {
            self.write("\n***** Te mueves hacia " + rm + "******\n");
        }
        // Miramos si la room es próxima al dragon
        if ( get ( rm , "habitacion-dragon" ) != null && get ( rm, "habitacion-dragon") ) {       
            if (Debug.evalEnabled) {
                self.write ("\n***** Estás próximo al dragón. ******\n");                           
            }
            // Comprobamos si el dragón está en esa estancia
            if ( equals ( mobile("dragon").getRoom(), rm ) ) {   
                if (Debug.evalEnabled) {
                    self.write ("\n***** Entras en la misma estancia que el dragón MUERES *****\n");
                }
            }           
        }
    }
}

Autor:  dddddd [ 28 Sep 2014 12:28 ]
Asunto:  Re: Comprobación estados "state"

edlobez escribió:
mirando en la documentación: http://www.caad.es/aetheria/doc/doku.ph ... _criaturas.
¿Puede que exista un error en la documentación?, en el enlace que pongo aparece:
Código:
 room(get(mobile(“Manolo”),”target”))


Pero me da error, ya que get(mobile("manolo"), "target"), retorna un integer:
Código:
*Offending text: room ( get ( self , "target" ) )
*Message: Sourced file: inline evaluation of: ``update( arg0, arg1);'' : Command not found: room( java.lang.Integer )


Sí, ese código (que se menciona dos veces) parece una errata porque el método de conveniencia room() espera un String.

Yo utilizaría world.getRoom(), que sirve tanto para Integer [*] como para String (nombre único).

[*] Por los motivos históricos que se mencionan en la nota a pie de página en la doc enlazada. De hecho, a tu manera has reimplementado world.getRoom(Integer).

Autor:  Al-Khwarizmi [ 28 Sep 2014 14:49 ]
Asunto:  Re: Comprobación estados "state"

Sí, efectivamente es lo que dice dddddd. Según los ejemplos de la documentación, puedes pasarle a la función de conveniencia room() un entero, pero eso no es realmente así porque espera un String (sí que se le puede pasar un entero a world.getRoom(...)). Creo que tampoco habría mayor problema en hacer que realmente esas funciones de conveniencia aceptaran también el entero, pero bueno, de momento en la versión actual de AGE la solución es lo que te ha dicho dddddd.

De todas formas, si lo que quieres hacer es, como has dicho, comprobar si AL ENTRAR en una estancia está el malo, ojo que no estás haciendo exactamente eso. Al mirar la propiedad target, estás mirando a qué habitación se dirige el jugador, pero no esperas a que realmente entre. En el momento en el que el jugador toma la decisión de ir al norte, si el dragón está al norte, ya lo matas. Incluso si en realidad, cuando el jugador terminase su movimiento (que podría ser varias unidades de tiempo más tarde) el dragón ya no iba a estar allí porque se estaba moviendo también, tú lo matarías igual porque no das tiempo a simular eso.

Si quieres hacer lo que has dicho literalmente (comprobar si al entrar está el malo) puedes hacerlo o bien con el evento onEnterRoom, o bien con el update, pero en vez de comprobar la propiedad "target", comprobando simplemente la habitación en la que se encuentra el jugador (jugador.getRoom()). Así sí que sólo harías saltar la muerte si el jugador efectivamente ha llegado al sitio donde está el enemigo.

Autor:  Al-Khwarizmi [ 28 Sep 2014 15:12 ]
Asunto:  Re: Comprobación estados "state"

Al-Khwarizmi escribió:
Creo que tampoco habría mayor problema en hacer que realmente esas funciones de conveniencia aceptaran también el entero

Hecho. Así ya no habrá que arreglar nada en la documentación. Nada como hacer que el sistema se ajuste a lo documentado. :lol:

Autor:  edlobez [ 28 Sep 2014 17:45 ]
Asunto:  Re: Comprobación estados "state"

Al-Khwarizmi escribió:
Si quieres hacer lo que has dicho literalmente (comprobar si al entrar está el malo) puedes hacerlo o bien con el evento onEnterRoom,...


Al final me he decidido usando el onEnterRoom de cada habitación por donde deambula el dragón.

Gracias

Autor:  baltasarq [ 01 Oct 2014 09:45 ]
Asunto:  Re: Comprobación estados "state"

Pero... pero... ¡me estás engañando con otro parser! :lol:

Autor:  edlobez [ 01 Oct 2014 11:39 ]
Asunto:  Re: Comprobación estados "state"

baltasarq escribió:
Pero... pero... ¡me estás engañando con otro parser! :lol:


Ostia que me has pillado....

Esta aventura en AGE ya la tengo casi finiquitada, ahora la están testeando.... así que espero en poco tiempo colgarla.

La que tengo también muy avanzada es otra en fi.js... que espero también colgarla en menos de un mes :D, después también de su correspondiente testeo.

Autor:  baltasarq [ 01 Oct 2014 11:44 ]
Asunto:  Re: Comprobación estados "state"

¡Genial! Estoy deseando verla...

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