キャラクターシートのカスタムロール解析

関数 スタートロール関数関数により、シート作成者はサイコロの出目にアクセスし、その出目の結果を計算することができます。

カスタムロール解析.gif

シートワーカー機能

startRoll( roll, callback? )(非同期) 

この関数は、ロールを文字列として受け取る(一般的にはロールテンプレートの文字列)。 この関数はロールサーバーへのロールを開始し、その結果がコールバックに返される。 このロールは、対応する "finishRoll "関数が呼び出されるまで、結果をチャットに投稿するのを待ちますが、5秒以内にfinishRoll関数が呼び出されない場合、ロールは自動的に投稿されます。 ロールサーバーからの結果は、以下のプロパティを含むオブジェクトとなる。


rollId:(文字列)

ロールを終了するために必要な、このロールに固有の識別子。


結果: (オブジェクト)

ロールサーバーからのロール情報を含むオブジェクトで、キーはロール名、値はロール情報を含むオブジェクトなど:

の結果:{
  roll1:{
  // ロールサーバーが計算したロール結果
  result: 48,
  // このロールのすべてのサイコロの結果の順序付き配列
  dice: [9,9,20,4,4,1],
  // このロールの元の式
  expression:'4d20+2d4',
  // 各「サブロール」の内訳(式の各部分は個別にロールされる)
  [
  {
  // '4d20'の'4'
  dice: 4,
  // '4d20'の'20'
  sides: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>

ダイスがチャットに出力されるとき、カスタム結果にマウスカーソルを合わせると、量子ダイスのシンボルと各ダイスの元の結果が表示されます。

さらに、ロールテンプレートの関数rollTotal、rollGreater、rollLess、rollBetweenは、ロールの計算結果を使用することができます:

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

これらのロール・テンプレート関数は、一般的に整数値を比較することを想定しているため、文字列値の比較に使おうとすると期待通りに動作しない可能性があることに注意してください。

これらの新要素をすべてまとめて、この機能の実装例を紹介しよう:

<button type="action" name="act_test">Click me</button>

<rolltemplate class="sheet-rolltemplate-test">
 <div class="sheet-template-container">
 <h1>{{name}}</h1>
 <div class="sheet-results">
 <h4>Result = {{roll1}}</h4>
 <h4>Custom Result = {{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.roll1.result
const computed = total % 4;

finishRoll(
results.rollId,
 {
                    roll1: computed,
                }
);
});
});
</cript>

また、ロールボタンと同じように、ロール(またはマクロ)に直接クリック可能なアクションボタンを含めることができるようになりました: [ここをクリック](~[キャラクターID]|[アクションボタン名]).キャラクターシートから作成されたロールにこれを含める場合、キャラクターIDは省略できます(ロールボタンと同じです): [ここをクリック](~[アクションボタン名]).

ロール開始時に ロール開始シートワーカーを使ってロールを開始する場合、システムは自動的に正しいリピーティングセクション ID を追加できないので、属性名を完全に解決する必要があります。 [ここをクリック](~repeating_test_-MckIineUhDw8UwVpy-z_test1).

しかし、わざわざ ロール開始 関数を介してロールを開始し、アクションボタンへの参照を含む場合、ユーザーがチャットのロール内でそのボタンをクリックすると、イベント情報オブジェクトの クリックされた イベントリスナーのイベント情報オブジェクトには、追加のプロパティが含まれます、 originalRollIdというプロパティが追加されます。 と一致します。 と一致する。 startRoll 呼び出しで返されるresults.rollIdと一致する。 こうすることで、別のロールのボタンをクリックして出たロールを元のロールに合わせたり、最初のロールの結果に基づいて2つ目のロールを修正したりすることができる。

そして最後になるが、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>

ベストプラクティスについてのメモ: このワークフローでは、基本的にどんなものでも計算結果として使用できますが、一般的には、ユーザーが結果にカーソルを合わせると、その計算のために行われたすべてのサイコロの出目を見ることができるようにしたいものです。 誰かに計算をチェックしてもらい、シートが正しいことを確認することをお勧めする。

この記事は役に立ちましたか?
43人中18人がこの記事が役に立ったと言っています