캐릭터 시트를 위한 사용자 정의 롤 파싱

함수 startRollfinishRoll 은 시트 작성자가 주사위를 굴리고 해당 굴림에 대한 결과를 직접 계산할 수 있게 합니다.

Custom_Roll_Parsing.gif

시트워커 함수

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>

최상의 실행 방법에 대한 참고 사항: 이 워크플로우를 사용하면 롤의 계산 결과로 기본적으로 모든 것을 사용할 수 있지만, 일반적으로 사용자가 결과 위에 마우스를 올려서 계산에 사용된 모든 주사위 굴림을 볼 수 있도록 해야합니다. 계산을 확인하고 시트가 올바르게 작동하는지 확인하는 것이 권장됩니다.

도움이 되었습니까?
42명 중 18명이 도움이 되었다고 했습니다.