Hola!
Veamos, según mi percepción actual de DOALL cuando haces un DOALL se repite el resto de la tabla en la que esté el DOALL desde la posición del DOALL hasta el final (si no hay un matching antes). Por ello es que el lugar natural para un DOALL es la tabla de respuestas.
Ahora bien, a lo largo de la vida de Paguagús-->Superglús->ngPAWS DOALL ha sufrido cambios. Recuerdo que Paguaglús hacia una implementación que ya no recuerdo como era, pero que no funcionaba del todo bien. Con Superglús hice una implementación en la que al menos esos DOALL de "COGER TODO" funcionaban. En algún momento Mastodon hizo su inPAWS, y al tratar de hacer target Superglús se encontró con diversas incompatibilidades de condactos, DOALL incluido. Total que se volvió a cambiar. ngPAWS implementa esta última.
En resumen, que no puede funcionar tal y como está, pero creo que lo que quieres hacer es ahora mucho más fácil en ngPAWS gracias a los
condactos sharp,
condactos colon y los
bloques de código.Se trata de que el pirata se lleve uno o más objetos, y no se lleve la vela, pues bien, creo que poner esto en el proceso 2 arregla el problema:
Código:
_ _
ATLT 18
ATGT 14
CHANCE 15
WRITELN "¡De repente tras un recodo del camino aparece el malvado pirata!"
LET fObjetoActual 1 ; Empiezo por el 1 para que la vela no se tenga en cuenta
CLEAR fContadorObjetosRobados
LE: fObjetoActual 17 ;<-------- 17 es el numero del último objeto, cambiar por el que corresponda
{
CARRIED# @fObjetoActual CHANCE# 20
{
COPYFF fObjetoActual 51
WRITELN "¡El malvado pirata te roba {OREF}!"
PLACE @fObjetoActual lGuaridaPirata
PLUS fContadorObjetosRobados 1
}
PLUS fObjetoActual 1
}
ZERO# fContadorObjetosRobados WRITELN "El pirata se marcha sin robarte nada, ¡has tenido suerte!"
NOTZERO # fContadorObjetosRobados WRITELN "El malvado pirata se marcha contento con su botín."
Explicación resumida:
Si estamos en la localidad adecuada y se cumple el CHANCE 15 de que aparezca el pirata empezamos un bucle por todos los objetos, desde el 1 (el 0 nos lo saltamos adrede) hasta el 17 (en el ejemplo, puedes poner el número del último objeto de tu aventura ahí, o el último que quieras que pueda robar).
El bucle lo hace el " LE: fObjetoActual 17" que viene a ser, mientras el fObjetoActual valga menos o igual que 17, haz lo que hay dentro de las llaves.
Dentro de las llaves, lo que hay dos comprobaciones con sharp, de que el objeto está llevado, y de que ademas ocurre el chance 20 de que se lo lleven. Si ambas cosas son ciertas, hace lo que hay entre el bloque de llaves de más dentro (basicamente escribir que el pirata se lleva el objeto, ponerlo en la guarida, e incrementar el contador de objetos que se ha llevado).
Al final de bucle sumamos 1 al fObjetoActual para volver justo debajo del LE: y seguir con el objeto 2, y asi sucesivamente hasta el 17
Al salir del bucle según haya o no haya robado algo, ponemos un mensaje.
Es un buen ejemplo de como con estas estructuras no hace falta DOALL en algunos casos.