Las funciones startRoll y finishRoll permitirán a los autores de hojas acceder a los lanzamientos de dados y calcular sus propios resultados para esos lanzamientos
Funciones de hoja de personaje
startRoll( roll, callback? ) (asíncrono)
Esta función acepta un lanzamiento como una cadena (generalmente una cadena de plantilla de lanzamiento). La función iniciará un lanzamiento al servidor de lanzamientos, cuyos resultados se devolverán a la devolución de llamada. El lanzamiento esperará una llamada correspondiente a la función “finishRoll” antes de publicar los resultados en el chat, sin embargo, si no se realiza la llamada a finishRoll en 5 segundos, el lanzamiento se publicará automáticamente. Los resultados del servidor de lanzamientos serán un objeto que contiene las siguientes propiedades
rollId: (cadena)
Un identificador único para este lanzamiento, necesario para finalizar el lanzamiento
resultados: (objeto)
Un objeto que contiene la información del lanzamiento del servidor de lanzamiento, donde las claves son los nombres de los lanzamientos y los valores son un objeto que contiene la información del lanzamiento, por ejemplo:
resultados: {
roll1: {
// El resultado del lanzamiento, tal como lo calcula el servidor de lanzamiento
resultado: 48,
// Un arreglo ordenado de los resultados de todos los dados en este lanzamiento
dados: [9,9,20,4,4,1],
// La expresión original para este lanzamiento
expresión: ‘4d20+2d4’,
// Un desglose de cada “sub-lanzamiento” (cada parte de una expresión se lanza por separado)
[
{
// El ‘4’ en ‘4d20’
dados: 4,
// El ‘20’ en ‘4d20’
caras: 20,
// Arreglo de los resultados de cada dado
resultados: [9,9,20,4]
},
…
]
},
…
}
finishRoll( rollId, computedResults? )
Esta función finalizará una tirada iniciada con la función startRoll y permitirá agregar resultados calculados a cada tirada. La función requiere el rollId de la función startRoll y puede aceptar un objeto donde las claves son los nombres de las tiradas y los valores son los resultados calculados para esa tirada, como una cadena o un número entero.
Cambios en la plantilla de tiradas
Para usar los resultados calculados personalizados en tus plantillas de tiradas, reemplaza los nombres de las tiradas en la plantilla con 'computed::<rollname>':
<rolltemplate class="sheet-rolltemplate-test">
<div class="sheet-template-container">
<h1>{{name}}</h1>
<div class="sheet-results">
<h4>Resultado = {{roll1}}</h4>
<h4>Resultado Personalizado = {{computed::roll1}}</h4>
</div>
</div>
</rolltemplate>
Cuando la tirada se muestra en el chat, al pasar el mouse sobre un resultado personalizado se mostrará el símbolo de tirada cuántica y los resultados originales de cada dado.
Además, las funciones de plantilla de lanzamiento rollTotal, rollGreater, rollLess y rollBetween pueden usar el resultado calculado de un lanzamiento:
<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>
Ten en cuenta que estas funciones de plantilla de lanzamiento generalmente esperan un valor entero para comparar, y el intento de usarlas para comparar valores de cadena puede no funcionar como se espera.
Reuniendo todos estos nuevos elementos, aquí hay un ejemplo de implementación de esta función:
<button type="action" name="act_test">Haz clic aquí</button>
<rolltemplate class="sheet-rolltemplate-test">
<div class="sheet-template-container">
<h1>{{name}}</h1>
<div class="sheet-results">
<h4>Resultado = {{roll1}}</h4>
<h4>Resultado Personalizado = {{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>
Además, ahora puedes incluir un botón de acción clickable directamente en un lanzamiento (o en una macro) de la misma manera que se pueden incluir botones de lanzamiento: [Haz clic aquí](~[character id]|[action button name]). Si lo incluyes en un lanzamiento hecho desde la hoja de personaje, puedes omitir el id del personaje (igual que los botones de lanzamiento): [Haz clic aquí](~[action button name]).
Ten en cuenta que al iniciar un lanzamiento a través del startRoll worker de la hoja, el sistema no podrá agregar automáticamente el id correcto de la sección repetida, y deberás resolver completamente el nombre del atributo [Haz clic aquí](~repeating_test_-MckIineUhDw8UwVpy-z_test1).
Sin embargo, si se toma la molestia de iniciar una tirada a través de la función startRoll , e incluye una referencia a un botón de acción, cuando un usuario haga clic en ese botón de la tirada en el chat, el objeto de información del evento en su clicked escuchador de eventos contendrá una propiedad adicional, originalRollId, que coincidirá con la results.rollId devuelta por la llamada startRoll de la tirada original. De esta manera, podrías hacer coincidir un lanzamiento hecho al hacer clic en un botón en otro lanzamiento con su lanzamiento original, y tal vez modificar el segundo lanzamiento en función de los resultados del primero.
Y por último, pero no menos importante, algunos de ustedes pueden haber notado y estar preguntándose por qué el callback en startRoll se marca como opcional. Esta será nuestra primera función de sheetworker para implementar la opción de usar promesas en tu código de hoja. Simplemente omite la devolución de llamada en la llamada a la función y la función devolverá una promesa. Entonces, el sheetworker para el código anterior podría escribirse de la siguiente manera:
<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 sobre las mejores prácticas: Este flujo de trabajo te permite usar básicamente cualquier cosa como resultado calculado de un lanzamiento, pero generalmente querrás asegurarte de que un usuario pueda pasar el cursor sobre el resultado y ver todos los lanzamientos de dados que se utilizaron para calcularlo. Se recomienda que alguien verifique el cálculo y se asegure de que la hoja lo haya hecho correctamente.