Hola,
Hay varios temas aquí. Lo primero, el parser.
http://fi-js.wikidot.com/acciones-y-reaccionesSi tecleamos "mete la caja fuerte", y hemos puesto "fuerte" como sinónimo de "caja", entonces el parser interpreta:
Código:
DROP objCajaFuerte objCajaFuerte
El parser solamente coge aquellas parte de la frase que tienen sentido para él. En general, los nombres compuestos no reaccionan demasiado bien para un esquema tan sencillo.
¿Como solucionar esto? La mejor forma sería agregar a los objetos la propiedad "adjetivos", e ignorarlos/ayudar con el adjetivo a identificar el objeto (por si hay varios objetos con el mismo nombre). Este es el esquema que seguía PAWS. En este momento, fi.js ni siquiera incorpora este sistema, con lo que no se pueden incluir dos objetos de mismo nombre (p.ej. "llave roja" y "llave azul").
Con esto, que es posible que lo implemente, identificaría correctamente "teclea en caja fuerte 1234"
La segunda cuestión es más peliaguda. "teclea 1234 en caja fuerte". Lo que trata de identificar el parser siempre es verbo y nombre, que se interpretará como el objeto directo u objeto1. No hay duda en cuanto al verbo, pero el problema es que el objeto 1... ¡no existe! Si el term1 no identifica un objeto existente, malo, porque significa que no se podrá determinar el objeto directo de la oración, y eso es realmente crítico (a no ser que el verbo no incorpore objetos directos ni indirectos, como en la oración "escucha").
Es decir, al margen de crear un
objeto falso (es como los llamo yo) no existe solución para este problema. La única forma sería hacer como en inform, poder indicar que el objeto directo va al final (
reverse en las acciones de inform), pero eso sí estoy seguro de que no lo voy a implementar.
Eso sí, mejor que crees una variable global con la clave en lugar de repetirla en varios sitios, por si decidieras cambiarla (si bien 1234 es claramente una clave segura y robusta).
