CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 19 Nov 2018 02:27

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: 11 Mar 2010 14:22 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
Saludos:

Tengo un problema que, como nunca he usado más de un PSI por localidad, nunca me había pasado en InformATE! 080625.

Consideren el siguiente código:

Código:
Include "EParser";
Include "Acciones";
Include "Gramatica";

class Estancia
has luz;

[ inicializar;
    localizacion = Lugar;
];

! ================= Estancias ===============

Estancia Lugar "Lugar"
with
    descripcion
        "Aqui estás, sin ningún lugar donde ir."
;

! ================= Objetos ===============

Object PSI1 "PSI1" Lugar
with
    nombre 'PSI1',
    descripcion "Es el PSI1. Háblale.",
    antes[;
        Hablar : "Hola, soy el PSI1.";
    ],
has animado;

Tenemos un PSI, sólito en su localidad. Si hablamos con él, obtenemos:

Lugar
Aqui estás, sin ningún lugar donde ir.

Puedes ver un PSI1.

>habla con PSI1
Hola, soy el PSI1.

Ahora bien, si al final del código anterior agregamos un segundo PSI:

Código:
Object PSI2 "PSI2" Lugar
with
    nombre 'PSI2',
    descripcion "Es el PSI2. Háblale.",
    antes[;
        Hablar : "Hola, soy el PSI2.";
    ],
has animado ;

y tratamos nuevamente de hablar con el PSI1, obtenemos en cambio la siguiente salida:

Lugar
Aqui estás, sin ningún lugar donde ir.

Puedes ver un PSI1 y un PSI2.

>habla con PSI1
¿A quién quieres hablar eso?

:shock: :oops: :?

¿¡Qué diablos está pasando aquí? Fijense lo que tengo que hacer para que el PSI1 me haga caso:

Lugar
Aqui estás, sin ningún lugar donde ir.

Puedes ver un PSI1 y un PSI2.

>habla con PSI1
¿A quién quieres hablar eso?

>PSI1
Hola, soy el PSI1.

Auxilio, socorro, ayuda, por favor... :oops:

De antemano agradecido, se despide,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 11 Mar 2010 16:14 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Lo he probado con Infsp6 y no da problema.
Por si acaso... ¿las mayúsculas dentro del nombre ' ' las has puesto sólo para el ejemplo aquí?
Es decir ¿Falla también con nombre 'fulano' para PSI1, y nombre 'mengano' para PSI2?
Lo digo porque igual no esté reconociendo nada en absoluto, a causa de las mayúsculas, y esté tomando los objetos por pura deducción, lo cual justificaría que en el caso de haber uno sólo el parser lo tomara directamente sin problema.

PD: He editado unas cuantas veces este mensaje, porque estaba escribiendo a la vez que iba probando. La única conclusión que he sacado es que el problema debe de estar en InformATE, porque en infsp6 va bien.
Haz un "xverbo habla" a ver cómo está definida la gramática de hablar.

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 11 Mar 2010 19:00 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
jarel escribió:
Por si acaso... ¿las mayúsculas dentro del nombre ' ' las has puesto sólo para el ejemplo aquí?
Es decir ¿Falla también con nombre 'fulano' para PSI1, y nombre 'mengano' para PSI2?

He cambiado los nombres de los objetos y la propiedad "nombre" a "psi1" y "psi2" con minúsculas: el efecto es el mismo.

jarel escribió:
Haz un "xverbo habla" a ver cómo está definida la gramática de hablar.

La salida del explain es:

Código:
Verb 'cuenta' 'explica' 'habla' 'narra'
     * creature 'de' topic -> Hablar
     * creature 'sobre' topic -> Hablar
     * creature topic -> Hablar
     * 'a' creature 'de' / 'sobre' topic -> Hablar
     * 'a' creature topic -> Hablar
     * 'con' creature 'sobre' topic -> Hablar
     * 'con' creature 'de' topic -> Hablar
     * 'con' creature 'acerca' 'de' topic -> Hablar
     * 'sobre' topic 'con' creature -> Hablar reverse
     * 'acerca' 'de' topic 'con' creature -> Hablar reverse
     * 'de' topic 'con' / 'a' creature -> Hablar reverse
     * topic 'a' creature -> Hablar reverse

Visto esto, he probado con extender 'habla':

Código:
Extend 'habla'
 * creature -> Hablar
 * 'a' creature -> Hablar
 * 'con' creature -> Hablar;

Y ahora responde a "habla a psi1" pero no responde para "habla con psi1" ni "habla psi1". Notar que la nueva salida del explain ahora es:

Código:
Verb 'cuenta' 'explica' 'habla' 'narra'
     * creature 'de' topic -> Hablar
     * creature 'sobre' topic -> Hablar
     * creature topic -> Hablar
     * 'a' creature 'de' / 'sobre' topic -> Hablar
     * 'a' creature topic -> Hablar
     * 'con' creature 'sobre' topic -> Hablar
     * 'con' creature 'de' topic -> Hablar
     * 'con' creature 'acerca' 'de' topic -> Hablar
     * 'sobre' topic 'con' creature -> Hablar reverse
     * 'acerca' 'de' topic 'con' creature -> Hablar reverse
     * 'de' topic 'con' / 'a' creature -> Hablar reverse
     * topic 'a' creature -> Hablar reverse
     * creature -> Hablar
     * 'a' creature -> Hablar
     * 'con' creature -> Hablar


Cada vez más confundido,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 12 Mar 2010 01:12 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Bueno, es que yo lo tenía modificado y donde pone creature puse noun.
Con creature igual tienes que poner el "Hablar" en la propiedad vida[;], en lugar de en antes[;],.

Código:
Object PSI1 "PSI1" Lugar
with
    nombre 'PSI1',
    descripcion "Es el PSI1. Háblale.",
    vida[;
        Hablar : "Hola, soy el PSI1.";
    ],
has animado;

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 12 Mar 2010 01:16 
Desconectado
Archivero
Archivero

Registrado: 08 Sep 2008 22:04
Mensajes: 266
Prueba a añadir "first" a la directiva "extend"

Código:
extend 'habla' first


He reproducido tu problema con InformATE y a mí se me soluciona así. Ver:

http://www.inform-fiction.org/manual/html/s30.html#p228

Parece que, por lo visto, en InformATE el orden influye.

--


Arriba
 Perfil  
 
NotaPublicado: 12 Mar 2010 04:03 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Tengo entendido que no es "habla CON" es "habla A".

De todas formas, en Datoki rehice toda la gramática del verbo hablar relacionada con los PSI, no debería fallar. Acepta ese tipo de cosas con "CON". Si te interesa, te la mando a tu email.

Saludos. :)

Explicación (pero no comprobada):

Pasa que si le pones "CON", como no está en la gramática, no lo toma como que se está hablando a un PSI concreto, sino que lo que siga al verbo hablar "CON PEPITO"-> pues eso será tomado como un "topic". Una cadena de texto completa. Inform siempre busca al primer PSI en la localidad para pasarle el "topic". Pero si encuentra dos, no sabe a quién pasárselo. Y ahí el problema.

[Editado]
Pues sí, es como yo decía.

Según lo copiado por jarel

Código:
Verb 'cuenta' 'explica' 'habla' 'narra'
     ! [...]
     * creature topic -> Hablar
     ! [...]
     * 'con' creature 'sobre' topic -> Hablar
     * 'con' creature 'de' topic -> Hablar
     * 'con' creature 'acerca' 'de' topic -> Hablar


si pones...

HABLAR CON psi1, lo reconoce como "* creature topic -> Hablar" porque no calza con niguno de los modelos "CON", porque faltan las preposiciones (o el "acerca de")

Vale decir, el "con psi1" pasa a ser el "topic". Y como tiene dos PSI no sabes a cual tirarle el muerto. :)

Saludos!

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
NotaPublicado: 12 Mar 2010 15:04 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
DrVanHalenFan escribió:
Prueba a añadir "first" a la directiva "extend"

Código:
extend 'habla' first


He reproducido tu problema con InformATE y a mí se me soluciona así. [...]

Parece que, por lo visto, en InformATE el orden influye.

Efectivamente, esto resuelve el problema, independiente de que se use "antes" o "vida" para "Hablar". Bastaba con extender "habla" según:

Código:
Extend 'habla' first
* creature -> Hablar
* 'a' creature -> Hablar
* 'con' creature -> Hablar;

¿No habría que incorporarlo a gramatica.h de la siguiente versión de InformATE? Debiera ir al principio del código del verbo, el que quedaría como:

Código:
Verb 'cuenta' 'narra' 'explica' 'habla'
    * creature -> Hablar
    * 'a' creature -> Hablar
    * 'con' creature -> Hablar
    * creature 'de' topic        -> Hablar
    * creature 'sobre' topic        -> Hablar
    * creature topic                       -> Hablar
    * 'a//' creature 'de'/'sobre' topic -> Hablar
    * 'a//' creature  topic        -> Hablar
    * 'con' creature 'sobre' topic    -> Hablar
    * 'con' creature 'de' topic        -> Hablar
    * 'con' creature 'acerca' 'de' topic -> Hablar
    * 'sobre' topic 'con' creature    -> Hablar reverse
    * 'acerca' 'de' topic 'con' creature -> Hablar reverse
    * 'de' topic 'con'/'a//' creature    -> Hablar reverse
    * topic 'a//' creature        -> Hablar reverse;

¡Muchas gracias a todos por su ayuda y paciencia!

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 12 Mar 2010 21:38 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
No sé si sea exactamente buena idea cambiar la gramática de tal manera, pero si sirve de ayuda, pego aquí la gramática que me curré para Datoki, por si comprende cosas que no están en la otra. La ultratesteé para comprobar que entendiera todas las formas que se me ocurrieron con el verbo "hablar". Espero sea útil.

Código:
!===============================================================================
! LA NUEVA GRAMATICA PARA EL VERBO 'HABLAR' (Accion 'Tell' y 'HablarCon')
!-------------------------------------------------------------------------------
Extend only 'habla' replace
  *                                           -> HablarCon
  * creature 'acerca' 'de' topic              -> Tell
  * creature 'sobre'/'de' topic               -> Tell
  * creature topic                            -> Tell
  * 'con'/'a//' creature 'acerca' 'de' topic  -> Tell
  * 'con'/'a//' creature 'sobre'/'de' topic   -> Tell
  * 'con'/'a//' creature topic                -> Tell
  * 'acerca' 'de' topic 'con'/'a//' creature  -> Tell reverse
  * 'sobre'/'de' topic 'con'/'a//' creature   -> Tell reverse
  * noun 'acerca' 'de' topic                  -> HablarCon
  * noun 'sobre'/'de' topic                   -> HablarCon
  * noun topic                                -> HablarCon
  * 'con'/'a//' noun 'acerca' 'de' topic      -> HablarCon
  * 'con'/'a//' noun 'sobre'/'de' topic       -> HablarCon
  * 'con'/'a//' noun topic                    -> HablarCon
  * 'acerca' 'de' topic 'con'/'a//' noun      -> HablarCon reverse
  * 'sobre'/'de' topic 'con'/'a//' noun       -> HablarCon reverse
  * 'con'/'a//' creature                      -> HablarCon
  * 'con'/'a//' noun                          -> HablarCon
  * creature                                  -> HablarCon
  * noun                                      -> HablarCon
  * 'contigo' 'mismo'                         -> HablarCon
  * 'contigo'                                 -> HablarCon
  * 'solo'                                    -> HablarCon
  * topic 'con'/'a//' creature                -> Tell reverse
  * topic 'con'/'a//' noun                    -> HablarCon reverse
;

[ HablarConSub ;
    ! si el jugador intenta 'hablar solo' o 'consigo mismo'...
    if (noun == 0 or player) {
      return L__M(##Tell, 1);  ! "Hablas solo durante un rato."
      ! tambien podria ser:
      ! "Hablar solo no es muy entretenido."
    }
    ! si es un objeto animado...
    if (noun has animate) {
      return L__M(##Tell, 2); ! "No has provocado ninguna reacción."
      ! tambien podria ser:
      ! print_ret (_El)noun," no parece",(n)noun," estar interesad",(o)noun," en hablar.";
    }
    ! en cualquier otro caso...
    return L__M(##Miscellany, 37); ! "Sólo puedes hacer eso con seres animados."
    ! tambien podria ser:
    ! "En general, es mejor hablar con alguien o algo que pueda responderte."
];


Saludos! :)

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 8 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 4 invitados


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:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM