CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 28 Sep 2020 19:41

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 719 mensajes ]  Ir a página Anterior  1 ... 43, 44, 45, 46, 47, 48  Siguiente
Autor Mensaje
NotaPublicado: 05 May 2009 10:28 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Creo que el problema es que en el chaleco te falta la información de que un chaleco se lleva puesto en el cuerpo.

Para ponerla, vas a su ficha de "prenda" y en los "miembros requeridos", añades un miembro llamado "cuerpo".


Eso era.
Ahora funciona correctamente. :)


Citar:
Cada objeto vestible necesita la información de en qué miembros se puede poner, así es como el sistema sabe que unas botas se ponen en los pies, unos guantes en las manos, etc. etc.


Y me pregunto yo...
¿Qué utilidad tiene eso?
¿Que un manco no se pueda poner mas que un guante?
Es que no lo veo muy prácico... a ver...
Código:
> Ponte los guantes.(típica respuesta de cualquier parser)
Te pones los guantes.

> Ponte los guantes.(respuesta por defecto de AGE)
Te pones los guantes en las manos.

comando> Ponte los guantes.(A un manco)
Te pones uno de los guantes en la única mano que te queda.

comando> Ponte los guantes. (A un doble manco)
Tu padre...


¿Tanto enriquece la descripción que se muestre exactamente en dónde se pone la ropa.
Además tanto cuidado con esto de las partes del cuerpo y algo tan lógico como que puedas llevar un chaleco salvavidas o una armadura encima de otra ropa, no te lo permite por defecto.

Citar:
Hmm, aunque edito... entonces no me explico cómo te lo ha dejado poner O_O



Código:
[Fatal Error] :1:1: Content is not allowed in prolog.
ERROR:  'Content is not allowed in prolog.'


¿Podría ser ese mensaje de error de la consola?
No me he fijado cuándo se ha imprimido, aunque ayer vigilaba la consola y no recuerdo que saliera... :roll:

Ahora mismo después de añadir el miembro cuerpo, ha dejado de pasar, si dejo vacio el campo "miembro", ya no me deja ponerme o quitarme la ropa. :roll:
Igual debería comprobar no pase como con el "i", quiero decir, que una vez has puesto la parte del cuerpo que lo usa, no te admita usarlo como ropa si la quitas, pero que si por error no la pones en un principio, sí que admita llevar ropa con ese campo vacío.

Un saludo
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 10:54 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Y me pregunto yo...
¿Qué utilidad tiene eso?
¿Que un manco no se pueda poner mas que un guante?
Es que no lo veo muy prácico... a ver...


Bueno, ten en cuenta que el AGE está pensado sobre todo para juegos de rol de texto, que se hagan aventuras que no son de rol con él es un "accidente".

En una aventura pensada para resolver unos puzzles, efectivamente, tanto detalle con las partes del cuerpo no sirve para nada más que para complicar las cosas.

En un juego de rol mínimamente detallado es esencial, porque son vitales cosas como que te puedes poner un par de guanteletes y un par de botas, pero no puedes ponerte dos pares de guanteletes a la vez porque ambos se ponen en las manos. O que te puedes poner diez anillos mágicos porque tienes diez dedos (aunque los roguelikes lo suelen simplificar a que sólo te los puedes poner en el anular y dejarte poner dos, y que el izquierdo haga un efecto más reducido :D). Además, el sistema de combate del AGE utiliza los miembros. Cuando te atacan, se hace un sorteo de a qué miembro impacta el ataque (los miembros que tienen más volumen tienen más probabilidad). Si te impactan en la cabeza, lo que determinará tu armadura será lo que llevas puesto en la cabeza (el casco), mientras que si es en el tronco será la cota de malla, etc.

En resumen, lo de los ítems vestibles en el AGE estaba pensado para armaduras, más que para prendas de una aventura "normal". De hecho se llamaban Armour, luego les cambié el nombre a Wearable cuando me di cuenta de que podría ser interesante usar el sistema para hacer otras cosas :D


Citar:
¿Tanto enriquece la descripción que se muestre exactamente en dónde se pone la ropa.
Además tanto cuidado con esto de las partes del cuerpo y algo tan lógico como que puedas llevar un chaleco salvavidas o una armadura encima de otra ropa, no te lo permite por defecto.


Bueno, lo de la descripción ya sabes que voy a hacer la librería para que no salga (igual que ya no sale en el inventario).

Respecto a lo de la armadura y tal, sí que se puede hacer si lo implementas al estilo clásico roguelike (es decir, un slot de armadura para "body" y otro para "cloak", por ejemplo).

Jenesis escribió:
Código:
[Fatal Error] :1:1: Content is not allowed in prolog.
ERROR:  'Content is not allowed in prolog.'


¿Podría ser ese mensaje de error de la consola?
No me he fijado cuándo se ha imprimido, aunque ayer vigilaba la consola y no recuerdo que saliera... :roll:


Huy, eso es un error de formato del XML. No de que el XML tenga algún campo que no reconozca AGE, sino del XML mismo que se supone que no es XML válido (tiene algún carácter ilegal o alguna cosa así). O bien es que estuviste editando el XML a mano y pusiste algo ilegal sin querer, o bien es que por algún fallo del PUCK se guardó mal ese XML. Pero si lo tuviste abierto mucho tiempo y no sabes exactamente cuándo salió el fallo, va a ser difícil seguirle la pista.


Jenesis escribió:
Igual debería comprobar no pase como con el "i", quiero decir, que una vez has puesto la parte del cuerpo que lo usa, no te admita usarlo como ropa si la quitas, pero que si por error no la pones en un principio, sí que admita llevar ropa con ese campo vacío.


Pues puede ser. Esta noche espero probar todas estas cosas y arreglar esos glitches.

_________________
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: 05 May 2009 11:04 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:

Huy, eso es un error de formato del XML. No de que el XML tenga algún campo que no reconozca AGE, sino del XML mismo que se supone que no es XML válido (tiene algún carácter ilegal o alguna cosa así). O bien es que estuviste editando el XML a mano y pusiste algo ilegal sin querer, o bien es que por algún fallo del PUCK se guardó mal ese XML. Pero si lo tuviste abierto mucho tiempo y no sabes exactamente cuándo salió el fallo, va a ser difícil seguirle la pista.


Ah pues no te preocupes.
Tiene que ser cuando he tenido abierto con un editor el world.xml mientras estaba funcionando el PUCK.
No he editado nada a mano, pero cada vez que hacía un cambio desde el mapa de PUCK, el editor me avisaba de los cambios y yo le hacía recargar el código de nuevo. Puede que tenga que ver con esos mensajes, porque imagino que el editor salvaría el documento, lo cual no deja de ser una intromisión en PUCK.


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 13:26 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Quitar el icono de "desplazar", no es imprescindible porque el mapa se mueve sin necesidar de pincharlo, y si se usa se corre el peligro de mandar los objetos al hiper-espacio y tener que reiniciar el IDE para recuperarlos. :lol:

Molaría que en el mapa a la par que se mueven los contenedores se moviera su contenido , me refiero a localidades con objetos o personajes, objetos con partes de objeto y a contenedores.

Que el cambio entre skins se pudiera realizar desde algún menú en vez editando un archivo.

Y nada más por ahora :)
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 16:57 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Mi guerrero, ha de cruzar el foso de un castillo con un cuchilloy más bien escaso de ropa.
Para ello he creado un objeto boca, que es parte del guerrero y he puesto el cuchillo como prenda, con todo lo que anteriormente había aplicado al chaleco.
El problema que tengo ahora es que la condición para que el guerrero nade, es que no lleve nada en el inventario, salvo el cuchillo que podría llevar en la boca.

Así pues para averiguar si el cuchillo se lleva puesto, he pensado que lo mejor era comprobar el estado de la relación wears de ese objeto con la boca.

Código:
if (world.getItem("boca").getRelationshipPropertyValueAsBoolean("wears") == true)


Pero la clase item, no reconoce ese get, y no se me ocurre otro modo de indicar que esa relación es de la boca y no del cuerpo o del chaleco.

¿Cómo debería hacerlo?


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 17:17 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Código:
if (world.getItem("boca").getRelationshipPropertyValueAsBoolean("wears") == true)


Pero la clase item, no reconoce ese get, y no se me ocurre otro modo de indicar que esa relación es de la boca y no del cuerpo o del chaleco.

¿Cómo debería hacerlo?


El problema es que las relaciones son cosa de dos objetos, no de uno. Es decir, la boca está relacionada con el cuchillo mediante una relación "wears", cuyo valor es true. Pero para otro objeto puede no tener relación, o tenerla con otro valor. Por lo tanto, si quieres ver el valor de una relación concreta necesitas especificar dos objetos, como aparece en la definición de ese método. En suma, sería por ejemplo:

Código:
Item cuchillo = world.getItem("cuchillo");
Item boca = world.getItem("boca");
if (boca.getRelationshipPropertyValueAsBoolean(cuchillo,"wears") == true) ...


Si quieres comprobar si el guerrero lleva algo en la boca pero que no tiene por qué ser necesariamente el cuchillo, también puedes; pero eso ya lo tienes que hacer con un método getRelatedEntities o getRelatedEntitiesByValue, que te devuelve todas las entidades relacionadas con una dada mediante una relación dada, y con un valor dado. Por ejemplo:

Código:
Item boca = world.getItem("boca");
List related = boca.getRelatedEntitiesByValue("wears",true);
if ( related.size() > 0 )
  aCreature.write("Llevas algo en la boca.\n");
else
  aCreature.write("No llevas nada en la boca.\n");

_________________
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: 05 May 2009 18:53 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
. En suma, sería por ejemplo:

Código:
Item cuchillo = world.getItem("cuchillo");
Item boca = world.getItem("boca");
if (boca.getRelationshipPropertyValueAsBoolean(cuchillo,"wears") == true) ...



Perfecto, ya funciona sin problema. :)
Muchas gracias.


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 08:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Quiero capturar la acción "poner" desde el código del mundo para que cuando sea "ponerse" o "ponte", se cambie por la acción "vestir".

No estoy segura de si un parserCommand "transitivo" puede funcionar correctamente en el código mundo siendo que toma como ob1, al propio mundo... :roll:
¿Me equivoco?


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 08:27 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
No consigo que ningún parseCommand de objetos funcione.
Lo malo es que el otro, no separa argumentos y yo necesito que separe al guerrero del objeto que se quiere poner.

¿Es el momento de empezar a trabajar con cadenas... ?


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 09:13 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Quiero capturar la acción "poner" desde el código del mundo para que cuando sea "ponerse" o "ponte", se cambie por la acción "vestir".

No estoy segura de si un parserCommand "transitivo" puede funcionar correctamente en el código mundo siendo que toma como ob1, al propio mundo... :roll:
¿Me equivoco?


No, efectivamente el parseCommand transitivo sólo lo puedes definir en el objeto al que te refieres (o en uno de esos objetos, en el caso de que sean dos). El mundo no tiene parseCommand transitivos, sólo tiene el general. Efectivamente eso lo tendrás que hacer trabajando con funciones de cadenas. Seguramente la manera más fácil sea la siguiente:

Coger la cadena verb + " " + args (el comando completo):

String elComando = verb + " " + args;

Reemplazar las apariciones de "poner guerrero" (que creo que es por lo que se sustituiría el "ponte") por "vestir". Esto se hace con el método replace de la clase String:

String nuevoComando = elComando.replace("poner guerrero","vestir");

Y por último, hacer un forceCommand() para que el jugador ejecute ese comando vestir que hemos construido:

aCreature.forceCommand(nuevoComando);
end();

Con eso debería funcionar.

_________________
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: 06 May 2009 09:15 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
jenesis escribió:

¿Es el momento de empezar a trabajar con cadenas... ?



Código:
   if ( verb.equalsIgnoreCase("poner") && args.contains("guerrero") )      
    {
   argumentos = args;
   args2 = args.replace("guerrero", "");   
   aPlayer.forceCommand("vestir" + args2);      
   }

}


Bueno, esto es Java y expresiones regulares, así que si ya me empiezo a meter en todos estos fregados, no sé si esforzarme un poco más y montar mi propio parser. :lol:

Código:
COMANDO>>  ponte el chaleco

verbo_mundo: eu.irreality.age.World@2f5dda
verb: poner
args: guerrero y el chaleco
¿Cómo? ¿Poner qué dónde?

verbo_mundo: eu.irreality.age.World@2f5dda
verb: vestir
args: el chaleco
Ya llevas puesto el chaleco


El problema es evidente.
He utilizado el forceCommand anteriormente con los comandos "abrir" y "empujar" y no me han dado este problema, aunque el segundo de ellos no tiene asociada una acción por defecto.

¿Cuál puede ser el error?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 06 May 2009 09:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Vaya... me has contestado mientras escribía mi anterior mensaje. :)


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 06 May 2009 09:24 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
jenesis escribió:
Vaya... me has contestado mientras escribía mi anterior mensaje. :)


Vale, mirando tu código me he dado cuenta de lo que le faltaba al mío.
El end();


Muchas gracias :)


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 09:37 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Código:
argumentos = args;
args2 = args.replace("guerrero", "");   
aPlayer.forceCommand("vestir" + args2);


Perfecto, totalmente distinto al que puse yo, pero hace exactamente el mismo efecto. :)

Como dices, lo único que te faltaba era el end().

Edito, sólo una cosa: creo que te falta otro detalle. En vez de

"vestir" + args2

pon

"vestir " + args2

(con un espacio entre vestir y las comillas), porque si no lo que vas a forzar es algo como

vestirtraje

en vez de

vestir traje,

ya que el "+" te concatena las cadenas tal cual (no te añade un espacio si tú no se lo pones).

Código:
Bueno, esto es Java  y expresiones regulares, así que si ya me empiezo a meter en todos estos fregados, no sé si esforzarme un poco más y montar mi propio parser. :lol:


Pues si quieres, ya sabes, yo te apoyo aunque eso suponga que abandones el mío... ya sabes que mi opinión, al contrario que la de muchos, es que cuanto más opciones de sistemas, mejor. :)

_________________
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: 06 May 2009 09:50 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
pon

"vestir " + args2



Cierto, se me pasó por alto ese detalle.
Lo curioso es que el parser lo ha entendido perfectamente.

Citar:
Pues si quieres, ya sabes, yo te apoyo aunque eso suponga que abandones el mío... ya sabes que mi opinión, al contrario que la de muchos, es que cuanto más opciones de sistemas, mejor. :)


Jajajaja!
No sé yo si me quedarán ganas. xDDD


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 719 mensajes ]  Ir a página Anterior  1 ... 43, 44, 45, 46, 47, 48  Siguiente

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