Benutzerdefiniertes Roll-Parsing für Zeichenblätter

Die Funktionen startRoll und finishRoll ermöglichen Blattautoren den Zugriff auf Würfelwürfe und die Berechnung ihrer eigenen Ergebnisse für diese Würfelwürfe

Custom_Roll_Parsing.gif

Sheetworker-Funktionen

startRoll( Roll, Rückruf? ) (asynchron) 

Diese Funktion akzeptiert eine Rolle als Zeichenfolge (im Allgemeinen eine Rollenvorlagenzeichenfolge). Die Funktion initiiert einen Roll-Vorgang zum Roll-Server, dessen Ergebnisse an den Rückruf zurückgegeben werden. Der Wurf wartet auf einen entsprechenden „finishRoll“-Funktionsaufruf, bevor er die Ergebnisse im Chat veröffentlicht. Erfolgt der Aufruf von „finishRoll“ jedoch nicht innerhalb von 5 Sekunden, wird der Wurf automatisch gepostet. Die Ergebnisse des Rollservers sind ein Objekt mit den folgenden Eigenschaften


rollId: (Zeichenfolge)

Eine eindeutige Kennung für diese Rolle, die zum Beenden der Rolle erforderlich ist


Ergebnisse: (Objekt)

Ein Objekt, das die Rolleninformationen vom Rollenserver enthält, wobei die Schlüssel Rollennamen und die Werte ein Objekt sind, das die Rolleninformationen enthält, zum Beispiel:

Ergebnisse: {
  roll1: {
  // Das Ergebnis des Wurfs, wie vom Würfelserver berechnet
  Ergebnis: 48,
  // Ein geordnetes Array der Ergebnisse aller Würfel in diesem Wurf
  Würfel: [9,9, 20,4,4,1],
  // Der ursprüngliche Ausdruck für diesen Wurf
  Ausdruck: '4d20+2d4',
  // Eine Aufschlüsselung jedes „Unterwurfs“ (jeder Teil eines Ausdrucks wird separat gewürfelt)
  [
  {
  // Die „4“ in „4d20“
  Würfel: 4,
  // Die „20“ in „4d20“
  Seiten: 20,
  // Array der Ergebnisse jedes Würfels
  Ergebnisse: [9 ,9,20,4]
  },
 …
      ]
  },
  …
}

finishRoll( rollId, berechnete Ergebnisse? )

Diese Funktion beendet einen mit der startRoll-Funktion initiierten Wurf und ermöglicht das Hinzufügen berechneter Ergebnisse zu jedem Wurf. Die Funktion erfordert die rollId der startRoll-Funktion und kann ein Objekt akzeptieren, bei dem die Schlüssel Rollennamen und die Werte die berechneten Ergebnisse für diese Rolle sind, als Zeichenfolge oder Ganzzahl.


Rollvorlagenänderungen

Um die benutzerdefinierten berechneten Ergebnisse in Ihren Rollenvorlagen zu verwenden, ersetzen Sie die Rollennamen 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, werden das Quantenwurfsymbol und die Originalergebnisse jedes Würfels angezeigt, wenn Sie mit der Maus über ein benutzerdefiniertes Ergebnis fahren.

Darüber hinaus können die Rollenvorlagenfunktionen rollTotal, rollGreater, rollLess und rollBetween das berechnete Ergebnis einer Rolle verwenden:

<rolltemplate class="sheet-rolltemplate-test2">
 <div class="sheet-template-container">
 <h1>{{name}}</h1>
 <div class="sheet-results">
 <h4>Ergebnis = {{roll1}}</h4>
 <h4>Benutzerdefiniertes Ergebnis = {{computed::roll1}}</h4>
 {{#rollTotal() computed::roll1 0}}
 <h5>Insgesamt 0!</h5>
{{/rollTotal() berechnet::roll1 0}}
 {{#rollGreater() computed::roll1 1}}
 <h5>Größer als 1!</h5>
{{/rollGreater() berechnet::roll1 1}}
 {{#rollLess() computed::roll1 2}}
 <h5>Weniger als 2</h5>
{{/rollLess() berechnet::roll1 2}}
 {{#rollBetween() computed::roll1 1 3}}
 <h5>Zwischen 1 und 3</h5>
{{/ rollBetween() berechnet::roll1 1 3}}
 </div>
 </div>
</rolltemplate>

Beachten Sie, dass diese Rollenvorlagenfunktionen im Allgemeinen zum Vergleich einen ganzzahligen Wert erwarten und der Versuch, sie zum Vergleichen von Zeichenfolgenwerten zu verwenden, möglicherweise nicht wie erwartet funktioniert.

Hier ist ein Beispiel für die Implementierung dieser Funktion, in dem alle diese neuen Elemente zusammengeführt werden:

<button type="action" name="act_test">Klicken Sie auf 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]]}}", (Ergebnisse) => {
const total = results.results.roll1.result
const berechnet = total % 4;

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

Außerdem können Sie jetzt eine anklickbare Aktionsschaltfläche direkt in eine Rolle (oder in ein Makro) einfügen, auf die gleiche Weise wie Rollschaltflächen: [Hier klicken](~[Zeichen-ID]|[Name der Aktionsschaltfläche ]). Wenn dies in eine aus dem Charakterblatt erstellte Rolle aufgenommen wird, kann die Charakter-ID weggelassen werden (wie bei den Rollenschaltflächen): [Hier klicken](~[Name der Aktionsschaltfläche]).

Beachten Sie, dass das System beim Starten einer Rolle über den Blattarbeiter startRoll nicht automatisch die korrekte Wiederholungsabschnitts-ID hinzufügen kann und Sie den Attributnamen vollständig auflösen müssen [Klicken Sie auf Hier](~repeating_test_-MckIineUhDw8UwVpy-z_test1).

Wenn Sie sich jedoch die Mühe machen, eine Rolle über die Funktion startRoll zu initiieren und einen Verweis auf eine Aktionsschaltfläche einzufügen, wird das Ereignisinfoobjekt angezeigt, wenn ein Benutzer im Chat auf diese Schaltfläche in der Rolle klickt in Ihrem angeklickten -Ereignis-Listener enthält eine zusätzliche Eigenschaft, originalRollId, die mit den results.rollId übereinstimmt, die von der ursprünglichen Rolle startRoll zurückgegeben wurden Forderung. Auf diese Weise könnten Sie einen Wurf, der durch Klicken auf eine Schaltfläche in einem anderen Wurf erstellt wurde, mit dem ursprünglichen Wurf abgleichen und möglicherweise den zweiten Wurf basierend auf den Ergebnissen des ersten modifizieren.

Und zu guter Letzt haben einige von Ihnen vielleicht bemerkt und fragen sich, warum der Rückruf in startRoll als optional markiert ist. Dies wird unsere erste Sheetworker-Funktion sein, die die Option zur Verwendung von Versprechen in Ihrem Blattcode implementiert. Lassen Sie einfach den Rückruf im Funktionsaufruf weg und die Funktion gibt ein Versprechen zurück. Der Sheetworker für den obigen Code könnte also stattdessen wie folgt geschrieben werden:

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

Ein Hinweis zu Best Practices: Mit diesem Workflow können Sie grundsätzlich alles als berechnetes Ergebnis eines Wurfs verwenden. Im Allgemeinen möchten Sie jedoch sicherstellen, dass ein Benutzer mit der Maus über das Ergebnis fahren und alle Würfelwürfe sehen kann habe mich an die Berechnung gemacht. Es wird empfohlen, die Berechnung von jemandem überprüfen zu lassen und sicherzustellen, dass das Blatt korrekt ist.

War dieser Beitrag hilfreich?
13 von 30 fanden dies hilfreich