함수 startRoll 및 finishRoll 은 시트 작성자가 주사위를 굴리고 해당 굴림에 대한 결과를 직접 계산할 수 있게 합니다.
시트워커 함수
startRoll( roll, callback? ) (비동기)
이 함수는 롤 템플릿 문자열로서 롤을 문자열로 받습니다. 이 함수는 롤 서버로 롤을 시작하고 해당 결과를 콜백으로 반환합니다. 롤은 결과를 채팅에 게시하기 전에 대응하는 “finishRoll” 함수 호출을 기다립니다. 그러나 5초 내에 finishRoll 호출이 이루어지지 않으면 롤은 자동으로 게시됩니다. 롤 서버에서의 결과는 다음과 같은 속성을 포함하는 객체입니다.
rollId: (문자열)
이 롤의 고유 식별자로 롤을 완료하기 위해 필요합니다.
결과: (객체)
롤 서버에서 롤 정보를 포함하는 객체로, 키는 롤 이름이고 값은 롤 정보를 포함하는 객체입니다.
결과: {
roll1: {
// 롤 서버에서 계산된 롤 결과
결과: 48,
// 이 롤의 모든 주사위 결과의 정렬된 배열
주사위: [9,9,20,4,4,1],
// 이 롤의 원래 표현식
표현식: ‘4d20+2d4’,
// 각 “하위 롤”의 분해 (표현식의 각 부분은 개별적으로 굴립니다)
[
{
// ‘4d20’에서의 ‘4’
주사위: 4,
// ‘4d20’에서의 ‘20’
면: 20,
// 각 주사위의 결과 배열
결과: [9,9,20,4]
},
…
]
},
…
}
finishRoll( rollId, computedResults? )
이 함수는 startRoll 함수로 시작된 롤을 완료하고 각 롤에 계산된 결과를 추가할 수 있습니다. 이 함수는 startRoll 함수에서 rollId가 필요하며, 문자열 또는 정수로 된 객체를 허용할 수 있습니다. 여기서 키는 롤 이름이고 값은 해당 롤에 대한 계산된 결과입니다.
롤 템플릿 변경
롤 템플릿에서 사용자 지정 계산된 결과를 사용하려면 템플릿에서 롤 이름을 'computed::<rollname>'로 대체하십시오.
<rolltemplate class="sheet-rolltemplate-test">
<div class="sheet-template-container">
<h1>{{name}}</h1>
<div class="sheet-results">
<h4>결과 = {{roll1}}</h4>
<h4>사용자 지정 결과 = {{computed::roll1}}</h4>
</div>
</div>
</rolltemplate>
롤이 채팅에 출력되면 사용자 지정 결과 위에 마우스를 올리면 양자롤 기호와 각 주사위의 원래 결과가 표시됩니다.
또한, roll 템플릿 함수인 rollTotal, rollGreater, rollLess, rollBetween은 roll의 계산된 결과를 사용할 수 있습니다:
<rolltemplate class="sheet-rolltemplate-test2">
<div class="sheet-template-container">
<h1>{{name}}</h1>
<div class="sheet-results">
<h4>결과 = {{roll1}}</h4>
<h4>사용자 정의 결과 = {{computed::roll1}}</h4>
{{#rollTotal() computed::roll1 0}}
<h5>총 0!</h5>
{{/rollTotal() computed::roll1 0}}
{{#rollGreater() computed::roll1 1}}
<h5>1보다 큼!</h5>
{{/rollGreater() computed::roll1 1}}
{{#rollLess() computed::roll1 2}}
<h5>2보다 작음</h5>
{{/rollLess() computed::roll1 2}}
{{#rollBetween() computed::roll1 1 3}}
<h5>1과 3 사이</h5>
{{/rollBetween() computed::roll1 1 3}}
</div>
</div>
</rolltemplate>
이론적으로는 이 주사위 템플릿 함수들은 일반적으로 정수 값을 비교하기 위해 사용되며, 문자열 값을 비교하기 위해 사용하면 예상대로 작동하지 않을 수 있음을 유의하세요.
이러한 새로운 요소들을 모두 결합하여, 이 기능을 구현하는 예제입니다:
<button type="action" name="act_test">클릭하세요</button>
<rolltemplate class="sheet-rolltemplate-test">
<div class="sheet-template-container">
<h1>{{name}}</h1>
<div class="sheet-results">
<h4>결과 = {{roll1}}</h4>
<h4>사용자 정의 결과 = {{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>
또한, 이제는 롤(또는 매크로)에 직접 클릭 가능한 액션 버튼을 포함할 수 있습니다. 롤 버튼을 포함하는 방식과 동일하게 사용할 수 있습니다. [여기를 클릭하세요](~[캐릭터 ID]|[액션 버튼 이름]). 캐릭터 시트에서 만든 롤에 포함하는 경우, 캐릭터 ID는 생략할 수 있습니다(롤 버튼과 동일): [여기를 클릭하세요](~[액션 버튼 이름]).
주의: 시트 워커를 통해 롤을 시작할 때, 시스템은 올바른 반복 섹션 ID를 자동으로 추가할 수 없으며, 속성 이름을 완전히 해결해야 합니다. startRoll 시트 워커, [여기를 클릭하세요](~repeating_test_-MckIineUhDw8UwVpy-z_test1).
그러나, 만약 startRoll 함수를 통해 롤을 시작하는 데 어려움을 겪는다면, 롤의 채팅에서 액션 버튼에 대한 참조를 포함하여 사용자가 해당 버튼을 클릭할 때 이벤트 정보 객체에는 추가 속성이 포함됩니다. clicked 이벤트 리스너에는 originalRollId속성이 포함됩니다. 이 속성은 results.rollId 의 원래 롤에서 반환된 startRoll 호출과 일치합니다. 이렇게 함으로써, 다른 롤에서 버튼을 클릭하여 만든 롤을 원래 롤과 일치시킬 수 있으며, 아마도 첫 번째 롤의 결과에 따라 두 번째 롤을 수정할 수 있습니다.
마지막으로, 중요한 것 중 하나는 startRoll의 콜백이 선택 사항으로 표시되는 이유입니다. 이것은 시트 코드에서 프로미스를 사용하는 옵션을 구현하기 위한 첫 번째 시트워커 함수가 될 것입니다. 함수 호출에서 콜백을 생략하면 함수는 프로미스를 반환합니다. 그래서 위의 코드에 대한 시트 워커는 다음과 같이 작성될 수 있습니다.
<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>
최상의 실행 방법에 대한 참고 사항: 이 워크플로우를 사용하면 롤의 계산 결과로 기본적으로 모든 것을 사용할 수 있지만, 일반적으로 사용자가 결과 위에 마우스를 올려서 계산에 사용된 모든 주사위 굴림을 볼 수 있도록 해야합니다. 계산을 확인하고 시트가 올바르게 작동하는지 확인하는 것이 권장됩니다.