CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 20 Oct 2017 20:33

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 28 Sep 2014 11:30 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
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"?

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


Arriba
 Perfil  
 
NotaPublicado: 28 Sep 2014 12:12 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
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");
                }
            }           
        }
    }
}

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


Última edición por edlobez el 28 Sep 2014 12:33, editado 1 vez en total

Arriba
 Perfil  
 
NotaPublicado: 28 Sep 2014 12:28 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
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).


Arriba
 Perfil  
 
NotaPublicado: 28 Sep 2014 14:49 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5272
Ubicación: Coruña
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.

_________________
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: 28 Sep 2014 15:12 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5272
Ubicación: Coruña
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:

_________________
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: 28 Sep 2014 17:45 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
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

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


Arriba
 Perfil  
 
NotaPublicado: 01 Oct 2014 09:45 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2887
Ubicación: España (Galicia)
Pero... pero... ¡me estás engañando con otro parser! :lol:

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 01 Oct 2014 11:39 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
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.

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


Arriba
 Perfil  
 
NotaPublicado: 01 Oct 2014 11:44 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2887
Ubicación: España (Galicia)
¡Genial! Estoy deseando verla...

_________________
-- Baltasar, el arquero


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 1 invitado


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