Anpassende Verarbeitung für Charakterbögen

Die Funktionen startRoll und finishRoll ermöglichen es den Bogenautoren, Würfelergebnisse abzurufen und eigene Ergebnisse für diese Würfe zu berechnen.

Custom_Roll_Parsing.gif

Sheetworker-Funktionen

startRoll( roll, callback? ) (asynchron) 

Diese Funktion akzeptiert einen Wurf als Zeichenkette (in der Regel eine Würfelschablone). Die Funktion initiiert einen Wurf auf den Würfelserver, deren Ergebnisse an den Rückruf zurückgegeben werden. Der Wurf wartet auf einen entsprechenden Aufruf der Funktion "finishRoll", bevor die Ergebnisse in den Chat gepostet werden. Wenn der finishRoll-Aufruf jedoch nicht innerhalb von 5 Sekunden erfolgt, wird der Wurf automatisch gepostet. Die Ergebnisse vom Würfelserver sind ein Objekt, das die folgenden Eigenschaften enthält


rollId: (Zeichenkette)

Eine eindeutige Kennung für diesen Wurf, erforderlich, um den Wurf zu beenden


Ergebnisse: (Objekt)

Ein Objekt, das die Wurfinformationen vom Wurfer-Server enthält, wobei die Schlüssel die Namen der Würfe sind und die Werte ein Objekt enthalten, das die Wurfinformationen enthält, zum Beispiel:

Ergebnisse: {
  roll1: {
      // Das Ergebnis des Wurfs, wie vom Wurfer-Server berechnet
      result: 48,
      // Ein geordnetes Array der Ergebnisse aller Würfel in diesem Wurf
      dice: [9,9,20,4,4,1],
      // Der ursprüngliche Ausdruck für diesen Wurf
      expression: ‘4d20+2d4’,
      // Eine Aufschlüsselung jedes Teilergebnisses (jeder Teil eines Ausdrucks wird separat geworfen)
      [
          {
              // Die ‘4’ in ‘4d20’
              dice: 4,
              // Die ‘20’ in ‘4d20’
              sides: 20,
              // Array der Ergebnisse jedes Würfels
              results: [9,9,20,4]
          },
          …
      ]
  },
  …
}

finishRoll(rollId, computedResults? )

Diese Funktion beendet einen mit der Funktion startRoll gestarteten Wurf und ermöglicht das Hinzufügen berechneter Ergebnisse zu jedem Wurf. Die Funktion erfordert die rollId der Funktion startRoll und kann einen Objekt akzeptieren, wobei die Schlüssel die Wurfnamen und die Werte die berechneten Ergebnisse für diesen Wurf als Zeichenfolge oder Ganzzahl sind.


Würfel-Vorlagen-Änderungen

Um die benutzerdefinierten berechneten Ergebnisse in Ihren Würfel-Vorlagen zu verwenden, ersetzen Sie die Wurfnamen in der Vorlage durch 'computed::<rollname>'

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

Wenn der Wurf im Chat ausgegeben wird, wird beim Überfahren mit der Maus über einem benutzerdefinierten Ergebnis das Quanten-Wurfsymbol und die ursprünglichen Ergebnisse jedes Würfels angezeigt.

Außerdem können die Rollenvorlagen-Funktionen rollTotal, rollGreater, rollLess und rollBetween das berechnete Ergebnis eines Wurfs verwenden:

<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>

Beachte, dass diese Rollenvorlagen-funktionen normalerweise einen ganzzahligen Wert zum Vergleich erwarten und dass der Versuch, sie zum Vergleich von Zeichenfolgenwerten zu verwenden, möglicherweise nicht wie erwartet funktioniert.

Hier ist ein Beispiel zur Implementierung dieses Features, in dem all diese neuen Elemente zusammengeführt werden:

<button type="action" name="act_test">Drück mich</button>

<rolltemplate class="sheet-rolltemplate-test">
    <div class="sheet-template-container">
        <h1>{{name}}</h1>
        <div class="sheet-results">
            <h4>Ergebnis = {{roll1}}</h4>
            <h4>Benutzerdefiniertes Ergebnis = {{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>

Außerdem kannst du jetzt einen anklickbaren Aktionsbutton direkt in einen Wurf (oder in ein Makro) inkludieren, genauso wie Würfelbuttons inkludiert werden können: [Hier klicken](~[character id]|[action button name]). Wenn dies in einem Wurf vom Charakterbogen inkludiert wird, kann die Charakter-ID weggelassen werden (gleich wie bei Würfelbuttons): [Hier klicken](~[action button name]).

Beachte, dass das System beim Starten eines Wurfs über den startRoll Sheetworker nicht in der Lage ist, automatisch die korrekte ID des sich wiederholenden Abschnitts hinzuzufügen, und du musst den Attributnamen [Click Here](~repeating_test_-MckIineUhDw8UwVpy-z_test1)vollständig auflösen.

Wenn du dir jedoch die Mühe machst, einen Wurf über die Funktion startRoll zu initiieren, und einen Verweis auf eine Aktionsschaltfläche einfügst, enthält das Event-Info-Objekt in deinem clicked Event-Listener eine zusätzliche Eigenschaft, originalRollId, die mit der results.rollId übereinstimmt, die vom startRoll Aufruf des ursprünglichen Wurfs zurückgegeben wurde. Auf diese Weise kannst du einen Wurf, den du durch Klicken auf einen Button in einer anderen Rolle gemacht hast, mit dem ursprünglichen Wurf abgleichen und vielleicht den zweiten Wurf basierend auf den Ergebnissen des ersten ändern.

Und zu guter Letzt haben einige von euch vielleicht bemerkt und fragen sich, warum der Callback in startRoll als optional gekennzeichnet ist. Dies wird unsere erste Sheetworker-Funktion sein, die die Möglichkeit bietet, Versprechen in deinem Sheet-Code zu verwenden. Einfach die Callback-Funktion im Funktionsaufruf weglassen und die Funktion gibt ein Versprechen zurück. Der Sheetworker für den obigen Code könnte stattdessen so geschrieben werden:

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

Hinweis zu bewährten Verfahren: Mit diesem Workflow können Sie im Grunde alles als das berechnete Ergebnis eines Wurfs verwenden, aber in der Regel sollten Sie sicherstellen, dass ein Benutzer auf das Ergebnis zeigen kann und alle Würfelwürfe sehen kann, die in der Berechnung verwendet wurden. Es wird empfohlen, dass jemand die Berechnung überprüft und sicherstellt, dass das Blatt es richtig verstanden hat.

War dieser Beitrag hilfreich?
18 von 42 fanden dies hilfreich