As funções startRoll e finishRoll permitirão que os autores das fichas acessem as rolagens de dados e calculem seus próprios resultados para essas rolagens
Funções do Assistente de Ficha
startRoll( roll, callback? ) (assíncrono)
Esta função aceita uma rolagem como uma string (geralmente uma string de modelo de rolagem). A função iniciará uma rolagem para o servidor de rolagem, cujos resultados serão retornados para o retorno de chamada. A rolagem aguardará uma chamada correspondente de "finishRoll" antes de enviar os resultados para o chat, no entanto, se a chamada finishRoll não for feita dentro de 5 segundos, a rolagem será enviada automaticamente. Os resultados do servidor de rolagem serão um objeto contendo as seguintes propriedades
rollId: (string)
Um identificador único para esta rolagem, necessário para finalizar a rolagem
resultados: (objeto)
Um objeto contendo as informações do lançamento do servidor de lançamento, onde as chaves são os nomes dos lançamentos e os valores são um objeto contendo as informações do lançamento, por exemplo:
resultados: {
roll1: {
// O resultado do lançamento, conforme calculado pelo servidor de lançamento
resultado: 48,
// Um array ordenado dos resultados de todos os dados neste lançamento
dados: [9,9,20,4,4,1],
// A expressão original para este lançamento
expressão: ‘4d20+2d4’,
// Uma quebra de cada “sub-lançamento” (cada parte de uma expressão é lançada separadamente)
[
{
// O ‘4’ em ‘4d20’
dados: 4,
// O ‘20’ em ‘4d20’
lados: 20,
// Array dos resultados de cada dado
resultados: [9,9,20,4]
},
…
]
},
…
}
finishRoll( rollId, computedResults? )
Esta função finalizará uma rolagem iniciada com a função startRoll e permitirá adicionar resultados calculados a cada rolagem. A função requer o rollId da função startRoll e pode aceitar um objeto, onde as chaves são os nomes das rolagens e os valores são os resultados calculados para essa rolagem, como uma string ou um número inteiro.
Modelos de Rolagem Alterações
Para usar os resultados calculados personalizados em seus modelos de rolagem, substitua os nomes das rolagens no modelo por '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>
Quando a rolagem é exibida no chat, ao passar o mouse sobre um resultado personalizado, será exibido o símbolo da rolagem quântica e os resultados originais de cada dado.
Além disso, as funções de modelo de rolagem rollTotal, rollGreater, rollLess e rollBetween podem usar o resultado calculado de uma rolagem:
<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>
Note que essas funções de modelo de rolagem geralmente esperam um valor inteiro para comparar, e tentar usá-las para comparar valores de string pode não funcionar como esperado.
Reunindo todos esses novos elementos, aqui está um exemplo de implementação dessa funcionalidade:
<button type="action" name="act_test">Clique em mim</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>
Além disso, agora você pode incluir um botão de ação clicável diretamente em um lançamento (ou em uma macro) da mesma forma que os botões de lançamento podem ser incluídos: [Clique aqui](~[id do personagem]|[nome do botão de ação]). Se estiver incluindo isso em um lançamento feito a partir da ficha de personagem, o id do personagem pode ser omitido (mesmo que os botões de lançamento): [Clique aqui](~[nome do botão de ação]).
Observe que ao iniciar um lançamento via startRoll trabalhador da ficha, o sistema não será capaz de adicionar automaticamente o id da seção de repetição correta, e você precisará resolver completamente o nome do atributo [Clique aqui](~repeating_test_-MckIineUhDw8UwVpy-z_test1).
No entanto, se se der ao trabalho de iniciar um rolamento através da função startRoll e incluir uma referência a um botão de ação, quando um utilizador clicar nesse botão no rolamento no chat, o objeto de informação de evento no seu ouvinte de eventos clicked conterá uma propriedade adicional, originalRollId, que corresponderá a results.rollId devolvido da chamada startRoll do rolamento original. Dessa forma, você poderia corresponder a um lançamento feito ao clicar em um botão em outro lançamento ao lançamento original e talvez modificar o segundo lançamento com base nos resultados do primeiro.
E por último, mas não menos importante, alguns de vocês podem ter percebido e estar se perguntando por que o retorno de chamada em startRoll está marcado como opcional. Esta será a nossa primeira função de sheetworker para implementar a opção de usar promessas no código da sua planilha. Simplesmente omita o retorno de chamada na chamada da função e a função retornará uma promessa. Então, o sheetworker para o código acima poderia ser escrito assim em vez disso:
<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>
Uma observação sobre as melhores práticas: Este fluxo de trabalho permite que você use basicamente qualquer coisa como o resultado calculado de um lance, mas geralmente você vai querer garantir que um usuário possa passar o mouse sobre o resultado e ver todos os lançamentos de dados que foram usados para calculá-lo. É recomendável que alguém verifique o cálculo e verifique se a planilha está correta.