Aventurero_krac escribió:
Citar:
Claro que es problema tuyo, has hecho recursividad y al cabo del rato al pobre inform se le acaba la pila. Y claro que tiene solución!!! ¿Me enseñas el código que hiciste para crear esa característica?
Ahí va, es simplemente igual que el ejemplo que viene con fhablaoo, excepto una linea añadida:
Ahá... he mirado el código de fhablaoo y no tiene la constante system definida, por tanto no puedes reemplazar código, además que el sistema está metido dentro de la clase Personaje.
Mi recomendación es que copy and paste todo el archivo de fhablaoo y que lo modifiques... vamos que modifiques la librería y la añadas al zip del código fuente de tu juego en plan fhablaoomijuego.inf
Para que funcione como tu quieres debes hacer lo siguiente:
En la clase personaje modifica esto:
[spoiler]
antes [x z ok eleccion;
HablarCon:
for (x=0 : x <= self.MAXQUIP : x++) {
if (self.TestQuip(x)) { ok++; }
}
! LA SIGUIENTE LINEA ESTA MODIFICADA:
! if (ok > 0) {
! SE CONVIERTE EN ESTA:
while (ok>0) {
! Esto hace que sea un bucle continuo que no parará de hablar hasta que no queden opciones.
print "^[Elige una opción para hablar:]^^";
! Listar las posibles opciones
for (x=0: x <= self.MAXQUIP: x++) {
if (self.TestQuip(x)) {
z++;
print "[", z, "] ";
self.Enunciado(x);
}
}
! Leer la opción elegida y responderla
new_line;
do {
! AQUI TB MODIFICAMOS LO SIGUIENTE:

)))
! print "Selecciona una opción (0 para no decir
nada) >> ";
print "Selecciona una opcion. >> ";
! Bien, nos acercamos a conseguir que no se pueda decir nada
#ifdef TARGET_ZCODE;
read buffer parse DibujarLineaEstado;
#ifnot;
KeyboardPrimitive(buffer, parse);
#endif;
eleccion = IntentarNumero(1);
! AQUI MODIFICAMOS ESTA LINEA:
! } until ((eleccion >= 0) && (eleccion <= z));
! Y ESTAS DOS SE ELIMINAN!!!!
! if (eleccion == 0)
! print "^Al final decides no decir nada.^";
} until ((eleccion > 0) && (eleccion <= z));
! Esta a continuación, aunque considera la opción 0, no nos afecta para nada al cambio hecho.
if (eleccion ~= 0) {
ok = 0; new_line;
for (x=0: x <= self.MAXQUIP: x++) {
if (self.TestQuip(x)) {
ok++;
if (ok == eleccion) {
self.Respuesta(x);
} ! Acabamos si es la correcta
} ! pasamos a la siguiente
} ! Acabamos todos los quips activos
} ! acabamos si queremos alguna respuesta
! EL RETURN TRUE ESTE DEBE ELIMINARSE!!!!!!!!
! rtrue;
} ! Acabamos si había algún quip
"No se te ocurre nada que decir.";
],
[/spoiler]
Bueno, ahí lo llevas, debes sustituir la propiedad original de la librería por esta. Te debería funcionar correctamente sin problemas, si te da alguno quizás es que el foro pone retornos de carro donde no debe, así que revisa las lineas de los comentarios luego en tu editor favorito...
Ahora lo suyo sería poner estas opciones con constantes opcionales configurables y actualizar la librería. ¿Que opinais?.
Chao.