Analyse de personnages personnalisée pour les feuilles de personnage

Les fonctions startRoll et finishRoll permettront aux auteurs de feuilles d'accéder aux jets de dés et de calculer leurs propres résultats pour ces jets

Custom_Roll_Parsing.gif

Fonctions de feuille de personnage

startRoll( roll, callback? ) (asynchrone) 

Cette fonction accepte un jet de dés sous forme d'une chaîne (généralement une chaîne de modèle de jet). La fonction initiera un jet sur le serveur de dés, dont les résultats seront renvoyés à l'appel de retour. Le jet attendra un appel à la fonction "finishRoll" correspondante avant de publier les résultats dans le chat, cependant si l'appel à finishRoll n'est pas effectué dans les 5 secondes, le jet sera publié automatiquement. Les résultats du serveur de dés seront un objet contenant les propriétés suivantes


rollId : (chaîne)

Identifiant unique pour ce jet, nécessaire pour terminer le jet


résultats : (objet)

Un objet contenant les informations sur les rouleaux provenant du serveur de rouleaux, où les clés sont des noms de rouleaux et les valeurs un objet contenant les informations sur les rouleaux, par exemple :

résultats : {
  roll1 : {
  // Le résultat du jet, tel que calculé par le serveur de jet
  result : 48,
  // Un tableau ordonné des résultats de tous les dés de ce jet
  dice : [9,9,20,4,4,1],
  // L'expression originale pour ce jet
  expression : '4d20+2d4',
  // Ventilation de chaque "sous-rouleau" (chaque partie d'une expression est lancée séparément)
  [
  {
  // Le '4' dans '4d20'
  dice : 4,
  // Le '20' dans '4d20'
  sides : 20,
  // Tableau des résultats de chaque dé
  results : [9,9,20,4]
  },
 …
      ]
  },
  …
}

finishRoll( rollId, computedResults ? )

Cette fonction terminera un jet initié avec la fonction startRoll et permettra d'ajouter des résultats calculés à chaque jet. La fonction exige le rollId de la fonction startRoll et peut accepter un objet, où les clés sont les noms des jets et les valeurs sont les résultats calculés pour ce jet, en tant que chaîne de caractères ou un entier.


Affichage des jets

Pour utiliser les résultats calculés personnalisés dans vos modèles de jets, remplacez les noms des jets dans le modèle par 'computed::<rollname>':

<rolltemplate class="sheet-rolltemplate-test">
 <div class="sheet-template-container">
 <h1>{{name}}</h1>
 <div class="sheet-results">
            <h4>Résultat = {{roll1}}</h4>
 <h4>Résultat personnalisé = {{computed::roll1}}</h4>
 </div>
 </div>
</rolltemplate>

Lorsque le jet est affiché dans le chat, le survol de la souris sur un résultat personnalisé affiche le symbole du jet quantique et les résultats d'origine de chaque dé.

De plus, les fonctions rollTotal, rollGreater, rollLess et rollBetween du modèle de lancer peuvent utiliser le résultat calculé d'un lancer :

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

Notez que ces fonctions de modèle de lancer attendent généralement une valeur entière à comparer, et il se peut que vous rencontriez des problèmes si vous essayez de les utiliser pour comparer des valeurs de texte.

En rassemblant tous ces nouveaux éléments, voici un exemple d'implémentation de cette fonctionnalité :

<button type="action" name="act_test">Cliquez-moi</button>

<rolltemplate class="sheet-rolltemplate-test">
    <div class="sheet-template-container">
        <h1>{{name}}</h1>
        <div class="sheet-results">
            <h4>Résultat = {{roll1}}</h4>
            <h4>Résultat personnalisé = {{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;

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

De plus, vous pouvez maintenant inclure directement un bouton d'action cliquable dans un jet de dés (ou dans une macro) de la même manière que les boutons de jet peuvent être inclus : [Cliquez ici](~[identifiant du personnage]|[nom du bouton d'action]). Si vous incluez cela dans un jet fait depuis la feuille de personnage, l'identifiant du personnage peut être omis (comme pour les boutons de jet) : [Cliquez ici](~[nom du bouton d'action]).

Notez que lorsque vous lancez un jet via le travailleur de la feuille startRoll de la section qui se répète correcte, et vous devrez résoudre complètement le nom de l'attribut [Cliquez ici](~repeating_test_-MckIineUhDw8UwVpy-z_test1).

Toutefois, si vous vous donnez la peine d'initier un roulement via la fonction startRoll et que vous incluez une référence à un bouton d'action, lorsqu'un utilisateur clique sur ce bouton dans le roulement du chat, l'objet event info de votre clicked event listener contiendra une propriété supplémentaire, originalRollId, qui correspondra au results.rollId renvoyé par l'appel startRoll du roulement d'origine. De cette manière, vous pourriez faire correspondre un lancer effectué en cliquant sur un bouton dans un autre lancer à son lancer initial, et peut-être modifier le second lancer en fonction des résultats du premier.

Et enfin, mais certainement pas moins important, certains d'entre vous l'ont peut-être remarqué et se demandent pourquoi le rappel dans startRoll est marqué comme optionnel. Il s'agira de notre première fonction sheetworker qui permettra d'utiliser des promesses dans votre code de feuille. Simply omit the callback in the function call and the function will return a promise. So, the sheetworker for the above code could be written like this instead:

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

A note on best practices: This workflow allows you to use basically anything as the computed result of a roll, but generally you’ll want to make sure that a user can hover over the result and see all of the dice rolls that went into calculating it. It’s recommended that you have someone check the calculation and make sure the sheet got it right.

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 18 sur 42