# Quest: cosa sono e come crearle

Le **Quest** sono missioni o incarichi che gli utenti possono completare all'interno di mondi virtuali interattivi. Si tratta di un concetto abbastanza comune nei videogiochi e che ritroverete anche nel vostro mondo virtuale.

Affinché un utente possa prendere parte a una Quest, è necessario che questa venga **attivata tramite una conversazione con un NPC**.\
\
Per poter implementare una Quest nella tua scena dovrai, dunque, effettuare tre macro passaggi:

* Creare la **Quest**
* Inserire un **NPC** in scena
* Impostare l'**attivazione della Quest** nella conversazione dell'NPC

L'utente potrà quindi scegliere di partecipare alla Quest tramite conversazione con l'NPC.\
Vediamo un esempio molto semplice:

\- L'utente interagisce con l'NPC cliccando sul tasto E, iniziando così la conversazione \
\- NPC: "*Benvenuto/a! Vuoi partecipare alla Quest?*" \
\- L'utente potrà a quel punto scegliere di cliccare sul pulsante "*Sì!*" o su "*No, grazie!*" (o qualunque altra forma avrai deciso di utilizzare nella conversazione)\
\- Se l'utente clicca su "*Sì!*", e la conversazione con l'NPC era stata correttamente settata per far partire la Quest secondo questa condizione, ecco che questa avrà inizio!

***NOTA:** oltre che sugli spaces, le Quest saranno disponibili a breve anche sulle Land!*

### Creazione Quest

Per creare una Quest, ti basterà cliccare sul pulsante verde '***Quests***' in alto, e successivamente sul pulsante '***Create a new quest***' che apparirà a metà schermo.

A questo punto, potrai dare un nome alla tua Quest, una descrizione, e sceglierne la tipologia a seconda della quest che vuoi creare, come vedremo tra poco.

<figure><img src="/files/947QRgQCgwtC5D9zJuMa" alt="" width="366"><figcaption><p>Crea una Quest</p></figcaption></figure>

Una volta compilati i campi relativi a Title, Description e Quest type, ti ritroverai in questa fase (nell'esempio, una quest di tipo CollectItems):

<figure><img src="/files/zVhQdCax8SZVJ4HSVnrm" alt=""><figcaption><p>Quest - Collect Items</p></figcaption></figure>

Da qui potrai decidere di modificare le info appena inserite (come Title e Description) cliccando su '***Edit Info***', cancellare la quest cliccando su '***Delete**'*, o procedere alla definizione dei suoi dettagli cliccando su '***Edit Quest***'. \
\
**Importante**: ricordati di settare la quest su '*Active*' se vuoi che questa sia funzionante!

Le quest al momento disponibili permettono di creare una '**Caccia al tesoro** o una quest di tipo '**Segui il percorso'**, con e senza **timer** (nuovissime tipologie di quest saranno disponibili a breve: seguici sui canali social per non perderti gli aggiornamenti)!\
\
In entrambi i casi, il concetto è lo stesso: una volta iniziata la Quest, l'utente partecipante dovrà avvicinarsi agli oggetti che avrai scelto di inserire nella quest, e avvicinarsi ad essi per raccoglierli. Avrà superato la quest solo quando li avrà raccolti tutti (o se lo avrà fatto in un determinato tempo nel caso in cui avrai deciso di impostare un timer).

#### Caccia al tesoro

Se vuoi implementare una caccia al tesoro, scegli **CollectItems** come tipologia di quest. \
In questa quest, tutti gli oggetti che sceglierai di utilizzare appariranno nello stesso momento allo start della quest, disposti nelle posizioni in cui avrai scelto di inserirli all'interno della scena.\
\
L'utente può raccoglierli nell'ordine che preferisce, l'unica cosa importante per il superamento della quest è che li raccolga **tutti**!

Una volta creata la 'base', cliccando su '***Edit Quest***' potrai decidere quali oggetti utilizzare per la tua quest, e come disporli. \
Scegli se utilizzare oggetti di tipo 'Tiles', 'Nature', 'Furnitures' o 'Decorations', poi clicca su Next e scegli i singoli oggetti da utilizzare.

<figure><img src="/files/HtUC3KMuj1m3uutEWRRi" alt=""><figcaption><p>Quest - Items to collect</p></figcaption></figure>

Nell'esempio in basso, abbiamo scelto un '*Circle Flower Bed*', di tipo '*Nature*', e stiamo procedendo a posizionarlo all'interno della scena.

<figure><img src="/files/RaaOjq4MmoHxcLsBI615" alt=""><figcaption><p>Quest - Items position</p></figcaption></figure>

Scegli quanti oggetti vuoi e posizionali dove preferisci all'interno della tua scena (puoi utilizzare anche oggetti diversi tra loro).

Quando avrai posizionato tutti gli oggetti che vuoi vengano raccolti dai tuoi utenti durante la quest, clicca su ***Next***. Potrai a questo punto impostare un'interazione con ognuno degli oggetti che hai posizionato. Questo significa che, quando un utente toccherà, passandoci sopra, un oggetto, potrai mostrargli un iframe con il contenuto di una pagina web, così come accade per gli altri oggetti posizionati nella scena al di fuori della quest, e come spieghiamo [QUI](/coderblock-studio/gestione-degli-ambienti-virtuali/integrazione-sito-web.md).\
A questo punto clicca su ***Next*** e procedi con l'impostare le '**Variables**', fondamentali per il corretto funzionamento della Quest.

Clicca su '***Add Variable***' per impostare ulteriori dettagli nella tua quest, come la presenza o meno di un timer.

<figure><img src="/files/aRMzwJzhW3ZsaWSrat1Z" alt="" width="368"><figcaption><p>Quest - Add Variable</p></figcaption></figure>

*Nota: la Description non deve contenere spazi.*

Nel primo menu a tendina potrai scegliere tra '***Counter***' e '***Countdown***'. \
\&#xNAN;***Counter*** indica semplicemente che la quest verrà superata quando tutti gli items verranno raccolti, e che l'utente durante la quest vedrà un contatore con gli items che restano da raccogliere. Inoltre potrai decidere se fare apparire gli oggetti contemporaneamente (come nella caccia al tesoro) o uno alla volta (come nel 'Segui percorso'). \
(Nel caso della caccia al tesoro, non è necessario impostare una variable di tipo Counter: puoi non impostare nessuna variabile e gli oggetti appariranno tutti contemporaneamente).\
\
Puoi invece aggiungere una variabile ***Countdown*** per fare in modo che, per superare la quest, gli utenti dovranno raccogliere tutti gli oggetti in un tempo predefinito.

A questo punta clicca su ***Ok*** e poi su ***Next***. \
Clicca su ***Next*** anche nella schermata successiva, ovvero '*Quest actor placement*', e poi clicca '***Done***' nell'ultima, ovvero '*Quest actor conversation*', in quanto l'attivazione della quest è demandata in questo caso ad un NPC esterno alla quest e alla sua conversazione, come spiegato nel prossimo paragrafo.

Complimenti, hai creato la tua prima Quest! Adesso non ti resta che impostarne l'attivazione tramite NPC, ma lo vediamo tra poco 😉

#### Segui il percorso

Se vuoi implementare una quest di tipo '**Segui il percorso**', scegli **FollowPath** come tipologia di quest. \
\
In questa tipologia di quest, gli oggetti che sceglierai di utilizzare appariranno nella scena uno per volta, nell'ordine e nella posizione che sceglierai. In questo caso è necessario dunque raccogliere l'oggetto apparso per far apparire il successivo (al contrario della caccia al tesoro) proprio per far sì che l'utente segua il percorso da te tracciato. \
\
Proprio per la natura della quest, che viene solitamente utilizzata proprio per indicare un percorso guidato all'utente, è consigliabile piazzare gli oggetti non troppo lontani tra loro, in modo da permettere all'utente di vedere il successivo.

Il processo di creazione di questo tipo di Quest è assolutamente simile a quello della caccia al tesoro. Dovrai infatti anche in questo caso, cliccando su '***Edit Quest***' dopo la creazione della quest 'base', scegliere e posizionare gli oggetti che vuoi vengano raccolti dai partecipanti alla quest.

L'unica vera differenza sta nella '***Variable***': dovrai infatti in questo caso impostare una variabile di tipo **Counter**, e settarla a '***Show one item at a time***'.\
\
Come prima, aggiungi ***Countdown*** se vuoi che i tuoi utenti debbano raccogliere gli oggetti - ad uno ad uno in questo caso - nel tempo a disposizione.&#x20;

### Inserire un NPC in scena

Una volta creata la quest, bisogna **impostarne l'attivazione all'interno della conversazione con un** **NPC**, che dovrai inserire in scena e che avrà proprio il ruolo di gestire la quest.

Inserisci dunque, come spiegato [QUI](/coderblock-studio/builder-tool/npc-e-conversazioni.md), almeno un NPC nella tua scena per utilizzare le quest: la conversazione non deve necessariamente essere mirata all'attivazione della quest, gli argomenti possono essere vari, l'importante è che ci sia un flusso che porti, nel momento in cui l'utente sceglie di partecipare alla quest, all'attivazione di quest'ultima.

**Nota**: l'NPC può far iniziare la quest, ma anche farla terminarle. Può anche dare dei suggerimenti sul posizionamento degli oggetti, se l'utente non riesce a trovarli.

Se durante una quest l'utente riprende la conversazione con l'NPC interagendo con esso, questo risponderà infatti in maniera diversa da come aveva fatto a quest non iniziata. E potrebbe rispondere in maniera ancora diversa una volta che la quest è stata superata.\
Sarai tu a decidere tutta la gestione della quest - prima durante e dopo - impostando a tuo piacimento la conversazione con l'NPC secondo dei parametri di ***Condition*** ed ***Effect*** come spiegato nel paragrafo successivo.

### Gestione Quest tramite NPC: *Condition* ed *Effect*

Una volta inserito in scena l'NPC e creato il suo flusso di conversazione come spiegato [QUI](/coderblock-studio/builder-tool/npc-e-conversazioni.md), è arrivato il momento di inserire, negli elementi della conversazione che ritieni più idonei, delle **Condizioni** e degli **Effetti** che permetteranno la gestione delle Quest (e non solo!).

Una ***Condition*** ti permette di attivare o meno un certo *ItemText* o *ItemChoice* di una *Narrative*. Ogni volta che il flusso di conversazione giunge sull'Item di una *Narrative*, effettua un controllo sulla *Condition* che gestisce quell'*Item* e se questa non si verifica (ad es: la Quest '*Raccogli i cristalli*' è terminata - mentre è ancora in corso o non ancora iniziata) allora quell'Item non verrà mostrato all'utente e il flusso di conversazione proseguirà ignorandolo. \
Viceversa, se la *Condition* è verificata o non è presente, l'*Item* verrà preso in considerazione, mostrato all'utente e gli eventuali *Effect* impostati verranno attivati. \
Al momento si può impostare una *Condition* affinché verifichi che una Quest sia attiva, iniziata, in progress o terminata.

Un ***Effect*** ti permette invece di impostare alcune funzionalità che si attivano quando il flusso di conversazione giunge a un determinato *Item* di una *Narrative* (sempre se la *Condition* è verificata o non è presente).\
Puoi decidere di fare iniziare una Quest, o che questa si fermi, o che venga completata (in maniera positiva o negativa).

<figure><img src="/files/5xokUgvBXzkIQ3GW0DGs" alt="" width="305"><figcaption></figcaption></figure>

La flessibilità di Condition ed Effect consente quindi di gestire, tramite uno stesso NPC, varie situazioni all'interno di una stessa Quest.\
Puoi infatti impostare il flusso di conversazione in modo che, ad esempio, la prima volta che l'utente parla con un NPC (con la quest quindi non ancora iniziata), questi gli chiede se vuole partecipare alla quest, mentre se l'utente torna a parlare con l'NPC durante lo svolgimento della quest la conversazione sarà diversa, con l'NPC che chiederà ad esempio se l'utente vuole suggerimenti sulla posizione degli oggetti da trovare. Allo stesso modo, se l'utente parla con l'NPC a quest superata, si potrà impostare una conversazione ancora diversa, con l'NPC che farà ad esempio i complimenti per il superamento della quest.\
È dunque fondamentale imparare a gestire *Condition* ed *Effect* per poter utilizzare al meglio le tue Quest.

Nell'**esempio iniziale** della nostra semplice conversazione con l'NPC e la Quest '*Collect Items*', lo start della quest viene impostato nella *Narrative 2* (nel suo primo e unico Item), a cui si giunge quando l'utente risponde '*Sì*!' alla domanda '*Vuoi partecipare alla Quest?'*

<figure><img src="/files/I2SHxaKfg5jDZcW7DLs0" alt="" width="182"><figcaption></figcaption></figure>

<figure><img src="/files/JhF3PEtdwcEYvt0vOOuD" alt="" width="172"><figcaption></figcaption></figure>

In questo caso non sono state inserite Conditions, dunque l'unico requisito per lo start della Quest è che l'utente risponda '*Sì*' e quindi il flusso di conversazione giunga alla *Narrative* che gestisce la funzione '*Start Quest*', facendo così iniziare la quest!

<figure><img src="/files/MOSdCUCUhxKdTK665UvQ" alt="" width="375"><figcaption><p>Quest Collect Items and Countdown</p></figcaption></figure>

**NOTA:** ricordati sempre, quando effettui modifiche al flusso di conversazione, di cliccare su '***Salva***' sia sul singolo Item che hai modificato, sia sulla Conversazione generale, sia su 'Save scene' in alto a destra!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-it.coderblock.com/coderblock-studio/builder-tool/quest-cosa-sono-e-come-crearle.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
