Passa al contenuto principale

IF ELSEIF ENDIF

[[IF:condizione_logica]] … [[ELSEIF]] … [[ENDIF]]

Le azioni associate ad IF sono quelle che permettono di aggiungere versatilità alle automazioni di QuestDown. In breve, tramite l’utilizzo di IF e di altri comandi (secondo la sintassi specificata in seguito), si possono creare degli Eventi e Azioni che dipenderanno da alcune Variabili e che potrebbero variare nel corso della partita. Per esempio. Una porta potrebbe risultare chiusa, ma dopo avere tirato una leva, risultare aperta. Oppure un mostro potrebbe comparire soltanto dopo avere esplorato una certa stanza, etc. All’atto pratico questo viene risolto tramite uno o più “Se …. allora …” . Per chi non ha familiarità di linguaggi di programmazione potrebbe non essere immediato capire i principi che si utilizzano per l’utilizzo di IF e di altri comandi. In questi casi può essere utile vedere gli esempi sotto e usare quelli come punto di partenza per sviluppare le proprie automazioni.

Ogni Variabile all’inizio ha valore 0.

L’azione IF funziona effettuando innanzitutto un’operazione logica. (vedi sotto). Se il risultato della Condizione Logica è “Vero” verrà viene mostrato il testo successivo e/o eseguite le azioni presenti fino al blocco [[ELSEIF]] o [[ENDIF]], in caso sia “Falso”, viene viene mostrato il testo successivo e/o eseguite le azioni presenti tra il blocco [[ELSEIF]] e [[ENDIF]]. Il blocco [[ELSEIF]] è opzionale:

  • Esempio 1:{[[(P), ON_OPEN(R24)]] [[IF: GET(lever) = 1]] You unlocked the door by pulling the lever before, so you can open the door! [[OPEN(S23)]] [[ELSEIF]] [[LOCKED]] [[ENDIF]]}

L’esempio sopra, il testo che appare dipende dal Valore della Variabile “lever”. Se la variabile “lever” è pari ad 1, compare il messaggio “You unlocked the door by pulling the lever …”. Altrimenti non compare nessun messaggio speciale e semplicemente la porta risulta chiusa (ricorda che ogni Variabile ha come valore iniziale zero). Un Evento con un utilizzo di IF come appena esemplificato potrebbe avere seguito per esempio un altro comando precedente in cui la variabile lever è stata settata ad 1. Ad esempio.
  • Esempio 2: {[[(K), ON_ENTER_ROOM:REPEAT]], [[ASK: Inside the room there is a lever., Do you want to pull it?]] You hear a strange sound from a nearby room [[SET(lever, 1]] [[END]]}
Nota che in questo caso la leva può essere tirata più volte, di fatto ogni volta che si entra nella stanza. Ma che una volta che ha assunto il valore 1, ogni volta che si tira si ripete la stessa azione e quindi non cambia nulla (il valore viene sempre messo ad 1). NOTA: per chi ha esperienza di programmazione è da notare che non è necessario inizializzare le Variabili prima di poterle utilizzare.

Condizioni logiche

Le condizioni logiche prevedono l'uso di speciali parole chiave come: TURN, RND,QUEST_OBJECTIVE_COMPLETED. Oltre a queste parole chiave predefinite è possibile definire delle Variabili, ovvero dei nomi a cui può essere assegnato un valore e quindi usato successivamente nelle condizioni.

Tali parole chiave devono essere comparate con un valore tramite gli operatori logici =, <>, >, >=, <, <= con valori assoluti, quali numeri o testi. Gli operatori permettono di fare dei check che possono dare come risultato “Vero” o “Falso”.

  • Esempio 1[[IF: GET(lever) = 1]]
Questo codice di esempio controlla che la Variabile “lever” abbia come valore 1. Se il valore è 1 allora la condizione logica ha come risultato “Vero”, in tutti gli altri casi in cui lever non ha valore = 1, darà come risultato “Falso”.
  • Esempio 2: [[IF: TURN > 3]]
Questo codice di esempio controlla che la Variabile “TURN” abbia un valore maggiore di 3. Per tutti i valori maggiori di 3, allora il risultato della condizione logica sarà “Vero”, nel caso di 1 o 2, il risultato della condizione logica sarà “Falso”.

Di seguito sono riportati alcuni esempi per varie possibilità di utilizzo di condizioni logiche con le speciali parole chiave. Per esempio il codice

Parole chiave e condizioni logiche

  • TURN indica l’attuale turno di gioco, però quindi può essere creato un IF per verificare che siano passati X turni per effettuare una azione o comunicare un messaggio ai giocatori.

    • Esempio : {[[(T), ON_NEW_TURN]] [IF: TURN > 20]] Too much time has passed, your quest has failed! [[QUEST_FAILED]] [[ENDIF]]}
In questo esempio all’inizio di ogni turno dei giocatori viene fatto un check, se il Turno è maggiore di 10 allora compare il messaggio “Too much time has passed, ..” e la Quest si conclude con un fallimento. Nota che come sempre per QuestDown, è necessario associare l’Evento ad un Marcatore. In questo caso, visto che usiamo ON_NEW_TURN, può essere in qualsiasi punto del tabellone.
  • RND(DA,A) serve per generare un numero casuale, genera un numero compresa tra i numeri. forniti DA e A

    • Esempio: {[[(A), ON_SEARCH_TREASURES]] [IF: RND(1,5) = 5]] You are lucky! You found 100 Gold coins! [[ELSEIF]] You don’t find anything [[ENDIF]]}

  • QUEST_OBJECTIVE_COMPLETED è in pratica una Variabile di default che indica se è stato raggiunto l'obiettivo della Quest. Questo operatore normalmente è posto uguale a 0, a meno che non sia stata usata precedentemente l’azione [[QUEST_OBJECTIVE_COMPLETED]] in tal caso avrà come valore 1.

    • Esempio: {[[(U), ON_DEATH(P11)]] [[IF: QUEST_OBJECTIVE_COMPLETED = 1]] You have successfully killed Grutgar and found the scroll Now you can escape from the dungeon [[ELSEIF]] Oh no! You killed the evil wizard before finding the secret scroll that you were sent to find. You have failed! [[QUEST_FAILED]] [[ENDIF]])]]}

In questo esempio dopo avere ucciso un mostro che era nella cella P11, solo se QUEST_OBJECTIVE_COMPLETED è uguale a 1, compare il testo “You have successfully killed … “, altrimenti comparirà il testo “Oh no! you killed the evil wizard ..” e la Quest sarà fallita.
  • GET(nome) viene usato per recuperare il valore di una variabile precedentemente assegnato con [[SET(nome,valore)]].
    • Esempio: {[[(A), ON_OPEN(N23)]] [[IF: GET(key) = 1]] You have the Key so you can open this door! [[OPEN(S23)]] [[ELSEIF]] [[LOCKED]] [[ENDIF]]}

In questo esempio, se la variabile key ha il valore 1 allora compare il testo “You have the Key so you can open this door”. Altrimenti, la porta è chiusa. Ricorda che ogni Variabile ha come valore iniziale 0. Nota che programmato in questa maniera, L’azione si verificherà con qualsiasi eroe che prova ad aprire la porta. Si può però creare un’automazione più complessa con ASK che può creare una combinazione.

{[[(A), ON_OPEN(O23)]] [[IF: GET(key) = 1]] [[ASK: Do you have the key?]] The door is now open [[OPEN(S23)]] [[ELSE]] [[LOCKED]] [[END]] [[ELSEIF]] [[LOCKED]] [[ENDIF]]}

In questo caso quello che accade è che dopo che si prova ad aprire la porta, comparirà la frase “Do you have the key?” e solo se la risposta è sì, allora la porta si aprirà. In tutti gli altri casi la porta rimane chiusa.