Analisi personalizzata del lancio per le schede dei personaggi

Le funzioni startRoll e finishRoll permetteranno agli autori delle schede di accedere ai lanci dei dadi e calcolare i propri risultati per tali lanci

Custom_Roll_Parsing.gif

Funzioni dello Sheetworker

startRoll( roll, callback? ) (asincrono) 

Questa funzione accetta un lancio come stringa (generalmente una stringa di modello di lancio). La funzione avvierà un lancio al server dei lanci, i cui risultati verranno restituiti alla callback. Il lancio aspetterà una chiamata corrispondente a "finishRoll" prima di inviare i risultati in chat, tuttavia se la chiamata a finishRoll non viene effettuata entro 5 secondi, il lancio verrà inviato automaticamente. I risultati dal server dei lanci saranno un oggetto contenente le seguenti proprietà


rollId: (string)

Un identificatore univoco per questo lancio, necessario per completare il lancio


risultati: (oggetto)

Un oggetto che contiene le informazioni del tiro dal server dei tiri, dove le chiavi sono i nomi dei tiri e i valori sono un oggetto che contiene le informazioni del tiro, ad esempio:

risultati: {
  roll1: {
      // Il risultato del tiro, come calcolato dal server dei tiri
      risultato: 48,
      // Un array ordinato dei risultati di tutti i dadi in questo tiro
      dadi: [9,9,20,4,4,1],
      // L'espressione originale per questo tiro
      espressione: ‘4d20+2d4’,
      // Una suddivisione di ogni "sottotiro" (ogni parte di un'espressione viene tirata separatamente)
      [
          {
              // Il '4' in '4d20'
              dadi: 4,
              // Il '20' in '4d20'
              facce: 20,
              // Array dei risultati di ogni dado
              risultati: [9,9,20,4]
          },
          …
      ]
  },
  …
}

finishRoll(rollId, computedResults? )

Questa funzione completerà un tiro iniziato con la funzione startRoll e consentirà di aggiungere i risultati calcolati a ogni tiro. La funzione richiede il rollId dalla funzione startRoll e può accettare un oggetto, dove le chiavi sono i nomi dei tiri e i valori sono i risultati calcolati per quel tiro, come stringa o numero intero.


Modelli di tiro Modifiche

Per utilizzare i risultati calcolati personalizzati nei tuoi modelli di tiro, sostituisci i nomi dei tiri nel modello con 'computed::<rollname>':

<rolltemplate class="sheet-rolltemplate-test">
    <div class="sheet-template-container">
        <h1>{{name}}</h1>
        <div class="sheet-results">
            <h4>Risultato = {{roll1}}</h4>
            <h4>Risultato personalizzato = {{computed::roll1}}</h4>
        </div>
    </div>
</rolltemplate>

Quando il tiro viene visualizzato nella chat, passando il mouse sopra un risultato personalizzato verrà visualizzato il simbolo del tiro quantico e i risultati originali di ogni dado.

Inoltre, le funzioni del modello di lancio rollTotal, rollGreater, rollLess e rollBetween possono utilizzare il risultato calcolato di un lancio:

<rolltemplate class="sheet-rolltemplate-test2">
    <div class="sheet-template-container">
        <h1>{{name}}</h1>
        <div class="sheet-results">
            <h4>Result = {{roll1}}</h4>
            <h4>Custom Result = {{computed::roll1}}</h4>
            {{#rollTotal() computed::roll1 0}}
                <h5>Total 0!</h5>
            {{/rollTotal() computed::roll1 0}}
            {{#rollGreater() computed::roll1 1}}
                <h5>Greater Than 1!</h5>
            {{/rollGreater() computed::roll1 1}}
            {{#rollLess() computed::roll1 2}}
                <h5>Less Than 2</h5>
            {{/rollLess() computed::roll1 2}}
            {{#rollBetween() computed::roll1 1 3}}
                <h5>Between 1 and 3</h5>
            {{/rollBetween() computed::roll1 1 3}}
        </div>
    </div>
</rolltemplate>

Si noti che queste funzioni del modello di lancio generalmente si aspettano un valore intero da confrontare, e tentare di usarle per confrontare valori di stringa potrebbe non funzionare come previsto.

Mettere insieme tutti questi nuovi elementi, ecco un esempio di implementazione di questa funzionalità:

<button type="action" name="act_test">Clicca qui</button>

<rolltemplate class="sheet-rolltemplate-test">
    <div class="sheet-template-container">
        <h1>{{name}}</h1>
        <div class="sheet-results">
            <h4>Risultato = {{roll1}}</h4>
            <h4>Risultato personalizzato = {{computed::roll1}}</h4>
        </div>
    </div>
</rolltemplate>

<script type="text/worker">
    on('clicked:test', (info) => {
        startRoll("&{template:test} {{name=Test}} {{roll1=[[1d20]]}}", (results) => {
            const total = results.results.roll1.result
            const computed = total % 4;

            finishRoll(
                results.rollId,
                {
                    roll1: computed,
                }
            );
        });
    });
</script>

Inoltre, ora puoi includere direttamente un pulsante d'azione cliccabile in un tiro (o in una macro) allo stesso modo in cui possono essere inclusi i pulsanti di tiro: [Clicca qui](~[id personaggio]|[nome pulsante d'azione]). Se includi questo in un tiro fatto dal foglio del personaggio, l'id del personaggio può essere omesso (come i pulsanti di tiro): [Clicca qui](~[nome pulsante d'azione]).

Nota che quando si avvia un tiro tramite il startRoll foglio di lavoro, il sistema non sarà in grado di aggiungere automaticamente l'id corretto della sezione di ripetizione e sarà necessario risolvere completamente il nome dell'attributo [Clicca qui](~repeating_test_-MckIineUhDw8UwVpy-z_test1).

Tuttavia, se ti prendi la briga di avviare un lancio tramite la funzione startRoll , e includi un riferimento a un pulsante di azione, quando un utente fa clic su quel pulsante nel lancio nella chat, l'oggetto info evento nel tuo cliccato listener conterrà una proprietà aggiuntiva, originalRollId, che corrisponderà all'id del lancio risultati.rollId restituito dal lancio originale startRoll chiamata. In questo modo, sarebbe possibile abbinare un lancio effettuato facendo clic su un pulsante in un altro lancio al suo lancio originale e forse modificare il secondo lancio in base ai risultati del primo.

E infine, ma certamente non meno importante, alcuni di voi potrebbero aver notato e chiedersi perché il callback in startRoll è contrassegnato come opzionale. Questa sarà la nostra prima funzione sheetworker per implementare l'opzione di utilizzare le promesse nel tuo codice di scheda. Semplicemente ometti la callback nella chiamata della funzione e la funzione restituirà una promessa. Quindi, il sheetworker per il codice sopra potrebbe essere scritto così invece:

<script type="text/worker">
    on('clicked:test', async (info) => {
        const results = await startRoll("&{template:test} {{name=Test}} {{roll1=[[1d20]]}}");
        const total = results.results.roll1.result
        const computed = total % 4;
        finishRoll(
            results.rollId,
            {
                roll1: computed,
            }
        );
    });
</script>

Una nota sulle migliori pratiche: Questo flusso di lavoro ti permette di utilizzare praticamente qualsiasi cosa come risultato calcolato di un lancio, ma in generale vorrai assicurarti che un utente possa posizionare il cursore sul risultato e vedere tutti i lanci di dadi che sono stati utilizzati per calcolarlo. È consigliato che qualcuno verifichi il calcolo e si assicuri che il foglio l'abbia fatto correttamente.

Questo articolo ti è stato utile?
Utenti che ritengono sia utile: 18 su 42