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]]}
- 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]]}
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]]
- Esempio 2:
[[IF: TURN > 3]]
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 unIF
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]]}
- Esempio :
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]]}
- Esempio:
-
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]])]]}
- Esempio:
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]]}
- Esempio:
{[[(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.