Newsgroup: it.comp.giochi.avventure.testuali
Titolo: problema con timer glulx

Salve a tutti,
Se si compila il seguente codice per glulx:
Constant Story "Nome";
Constant Headline
"intestazione";
Include "infglk";
Include "Parser";
global conta=0;
Include "VerbLib";
Include "Replace";
[ HandleGlkEvent ev;
 switch (ev-->0) {
evtype_Timer:
conta++;
if (conta==4){
glk_request_timer_events(0);
print "fine del gioco!";
 deadflag=1;}
}
];
[ InitGlkWindow;
 rfalse;
];
[ Initialise;
location = unica;
glk_request_timer_events(1000);
rtrue;
];
Include "ItalianG";
object unica "Locazione"
with description "descrizione", has light;
Dopo 4 secondi apparirą la scritta fine del gioco
Perché, perņ, la deadflag non funziona?
Anche se metto return 0, 1 o 2, non funziona lo stesso!
Infatti, dopo la print ricomapre il rprompt, basta che perņ io scriva guarda 
per far funzionare la deadflag. Cosa ho mancato?
Grazie! 

 per far funzionare la deadflag. Cosa ho mancato?
La deadflag viene controllata solo `a fine turno'. Il turno passa
quando il parser ha macinato qualcosa...
Devi utilizzare nella HandleGlkEvent gli altri parametri (che non hai
dichiarato) per simulare un comando digitato e far proseguire il turno

 ha scritto nel messaggio 
news:1189959380....@o80g2000hse.googlegroups.com...
La deadflag viene controllata solo `a fine turno'. Il turno passa
quando il parser ha macinato qualcosa...
Devi utilizzare nella HandleGlkEvent gli altri parametri (che non hai
dichiarato) per simulare un comando digitato e far proseguire il turno
Ehi, sei provvidenziale!
I miei complimenti vivi!
Il codice, ora, l'ho modoificato come segue:
Constant Story "Nome";
Constant Headline
"intestazione";
Include "infglk";
Include "Parser";
global conta=0;
Include "VerbLib";
Include "Replace";
[ HandleGlkEvent ev context abortres newcmd cmdlen;
 switch (ev-->0) {
evtype_Timer:
conta++;
if (conta==4){
glk_request_timer_events(0);
print "fine del gioco!";
 deadflag=1;
newcmd = "l";
cmdlen = PrintAnyToArray(abortres+WORDSIZE, INPUT_BUFFER_LEN-WORDSIZE, 
newcmd);
abortres-->0 = cmdlen;
return 2;
}
}
];
[ InitGlkWindow;
 rfalse;
];
[ Initialise;
location = unica;
glk_request_timer_events(1000);
rtrue;
];
Include "ItalianG";
object unica "Locazione"
with description "descrizione", has light;
Funziona alla grande, ma Resta solo un problema. Quando io simulo il comando 
l (guarda), prima di finire il gioco col "sei morto", ovviamente lui mi dà 
la descrizione della locazione.... La keepsilent non funziona! E' vero, sì, 
che io potrei costruire un verbo apposta che non stampi niente o creare 
qualche altro artificio con le before su un oggetto. Ma è possibile che non 
ci sia un modo più naturale? 

 ci sia un modo più naturale?
A parte che su inform di roba naturale ce n'e' ben poca al di fuori
del funzionamento normale...
Secondo me il modo piu' semplice e' davvero implementare un'azione
fittizia che non fa nulla.
In alternativa, il secondo modo piu' semplice potrebbe essere
implementare BeforeParsing per azzoppare l'input del parser su
deadflag (a naso...)
Alternativamente se vuoi colpire al cuore il problema, considera che
stai uscendo dalla routine Keyboard
fra le label .ReType e .ReParse (riga 1270 di parserm.h :P)
Ora vai, sparati su un piede e impiccati con tutta la corda che ti ho
dato (eheheh)
Buon divertimento