CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 15 Nov 2018 14:34

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
NotaPublicado: 02 Dic 2009 01:42 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Buenas, he extraído la parte del código de Fhablao.h en la que se detecta el número de opción elegida en los menús de conversación:
Código:
do{
KeyboardPrimitive(buffer, parse);
i=TryNumber(1);
} until ((i >= 0) && (i <= NUMERO_DE_OPCIONES));


Esto es: en la variable i, se almacena el número que hayamos tecleado tras pulsar [return].
El problema es que la siguiente vez, si en lugar de escribir un número pulsas [return] directamente el programa traga aplicando el último valor tecleado.
¿Cómo podría borrarle la memoria al buffer?

Y otra cuestión. En el mismo código de Fhablao leo que Inform admite un máximo de 7 parámetros a enviar a una función. ¿Se refiere esto a la Máquina Z o también es aplicable a Glulx?

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 02 Dic 2009 05:32 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Hombre... eso yo lo reparé hace muuuucho tiempo en mi librería Datoki. Hay una copia funcional con la corrección que puedes sacar de la última versión (la última última) de FHablaOO.h para InformATE!, porque le mandé el código arreglado a Morgul. Como la versión de InformATE! y la de INFPS6 son idénticas... supongo que no tendrás problemas en copiarlas.

Ahora, si quieres, puedo enviarte una copia de Datoki. Tiene funcionalidad aumentadas. Muchas cosas más útiles... gramática muy mejorada, soporte de temas (como Palique.h) soporte para subdiálogos, menús numéricos, relanzado automático de diálogo, copias de seguridad de los Quips (en Datoki se llaman "tokis"), los mensaje son todos personalizables sin hackeos (como textos o rutinas), rutinas after() y before(), etc. No está documentada, pero no deberías tener problemas en entenderla, y siempre estoy yo acá para cualquier consulta. :D

Como sea, te mando el código de Datoki que corrige ese problema. No identico al de FHablaOO.h porque yo cambié el flujo del loop de conversación para optimizarlo, pero es básicamente la idea...

Spoiler: Mostrar
Código:
          ! averigua la opcion elegida y responde
          new_line;
          do {
            .Hay_InputLimpio;
            ! la primera parte del mensaje: 'Elige una opcion valida'
            PrintOrRun(self,msg_elegir_opcion1,1);
            ! solo si el dialogo no esta 'bloqueado' se debe mostrar
            ! la segunda parte del mensaje: '(0 para no decir nada)'
            if (self hasnt locked) {
              print " "; PrintOrRun(self,msg_elegir_opcion2,1);
            }
            PrintOrRun(self,msg_elegir_opcion3,1);
            KeyboardPrimitive(buffer, parse);
           
            ! averiguamos si se ha escrito algun numero
            #ifdef TARGET_ZCODE;
                hay_num = parse->1;
            #ifnot; ! TARGET_GLULX
                hay_num = parse-->0;
            #endif; ! TARGET_
           
            ! si no hay numero quiere decir que el input ha sido en blanco (limpio),
            ! por lo tanto vuelve a lanzarlo para obtener un numero correcto
            if (hay_num == 0) { jump Hay_InputLimpio; } ! saltamos al inicio del bucle
           
            ! si hay input efectivo (con numero), entonces averiguamos su valor
            toki_sel = TryNumber(1);
           
            ! si el dialogo esta 'bloqueado' no se debe permitir la opcion
            ! cero (no decir nada); se pedira un nuevo input de opcion valida
            if (self has locked && toki_sel==0) { jump Hay_InputLimpio; }
           
          ! el 'until' ahora comprueba que el numero este dentro del rango
          ! de la lista en el menu de dialogos
          } until ((toki_sel >= 0) && (toki_sel <= toki_num));


Saludos! Si quieres Datoki, nada más pídemela. :wink:

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


Arriba
 Perfil  
 
NotaPublicado: 02 Dic 2009 05:41 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
jarel escribió:
Y otra cuestión. En el mismo código de Fhablao leo que Inform admite un máximo de 7 parámetros a enviar a una función. ¿Se refiere esto a la Máquina Z o también es aplicable a Glulx?


Es limitación de la máquina Z. Glulx soporte cantidad de argumentos variables. Máquina-Z no. Y como FHablaOO.h es biplataforma, tiene que adaptarse a las características comunes entre los dos... estos es, no más de 7 argumentos por llamada a función.

En Datoki mejoré un poco la rutina de activación de los Tokis (quips)... y sólo debes indicar el toki que quieres activar o desactivar... con un máximo de 7, siendo (si usas el toki cero) el primer argumento de la llamada (si no usas el toki cero, da lo mismo el orden de los tokis). La llamada se realiza entonces de manera mucho más corta que la que trae originalmente FHablaOO.h

En cualquier caso, puedes hacer tantas activaciones de Quips (o Tokis) en FHablaOO.h/Datoki simplemente llamando a la rutina de activar estos una tras otra, tantas como quieras. Solo al final del ciclo de respuesta los nuevos Quips/Tokis activados serán computados.

Saludos! :D

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


Arriba
 Perfil  
 
NotaPublicado: 02 Dic 2009 15:33 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Muchas gracias Eliuk, funciona perfectamente.

¡Y ya sabía que lo habías arreglado! De hecho antes de escribir este mensaje entré en tu página buscando la librería, pero no la encontré.
De momento con esto me vale, es para hacer una especie de menús.

Saludos

PD: La intrucción "jump" no la conocía, como el "goto" en BASIC, otra cosa interesante que he aprendido de rebote :)
PD2: Buscando en el disco duro, resulta que tengo una versión de Datoki del 2007.

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 02 Dic 2009 17:54 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
jarel escribió:
Muchas gracias Eliuk, funciona perfectamente.


Cool! :D

jarel escribió:
PD2: Buscando en el disco duro, resulta que tengo una versión de Datoki del 2007.


Bueno, si de todas formas te interesa... igual puedes pedírmela luego. Creo que tengo una versión más mejorada que la del 2007. :)

P.D: Por cierto, el sistema de configuración de Datoki está pintado para hacer menús numéricos genéricos. Hay opciones que te permiten "despersonalizar" cualquier menú, quitando todos los mensaje relacionados con "conversación" y dejar simples menús genéricos, àla ZIPI, :)

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


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