API:ユーティリティ関数

ユーティリティ機能は、Roll20 のゲーム空間を一貫して操作するためのものです。 ユーティリティ関数は、スクリプトのどこからでも呼び出すことができます(たとえば、イベント・コールバックの中など)。


アンダースコア.js

Underscore.jsライブラリに(_グローバルオブジェクト経由で)アクセスすることができます。 Underscoreは、_.each(オブジェクトの配列を繰り返し処理する)などのヘルパー関数を提供しています。 をチェックしてください。 アンダースコアのドキュメントを参照してください。


ロギング

ログ(メッセージ)

この関数を使用すると、スクリプトエディタページのMOD(API)コンソールに出力をログ出力することができます。 スクリプトのデバッグや、MOD(API)サンドボックス内で何が起こっているかを把握するのに便利です。

on("change:graphic", function(obj) {    
  log("Heard change for object ID: " + obj.id);
});

オブジェクトの順序

toFront(obj)toBack(obj)

これら2つの関数は、テーブルトップ上のオブジェクトを、それが現在乗っているレイヤーの前面(または背面)に移動させます。 イベント・コールバックで受け取ったり、getObjや findObjsを呼び出したりして、実際のオブジェクトを渡さなければならないことに注意してください。


乱数

randomInteger(max)

サイコロにこの関数を使う!この関数は モジュロバイアスを考慮し、乱数が1からMAXの間で均等に分布するようにします。

最小値を 1、最大値をmax とする乱数整数を返す。 これはRoll20がサイコロの出目に使っているのと同じ機能で、これらの数値は統計的に厳密にランダムであることが証明されている。

Math.random()

Javascriptの「デフォルト」のMath.random()は、Roll20に搭載されている暗号的に安全なPRNGに置き換えられているため、Mod(API)スクリプトで通常のようにMath.random()を呼び出すことができます。 そのため、Math.random()を使用する既存のスクリプトは、コンピュータ上で可能な限りランダムに近い結果であることを理解した上で使用することができる。

範囲内の偶数分布が必要な場合は、Math.random()を使用しないでください。 Math.random()は、Roll20が管理できるのと同じくらい良い乱数を与えてくれますが、その乱数を(サイコロの目のような)均等な分布の範囲に変える計算は、モジュロやフロアコールを使った乗算のように簡単ではありません。 このような場合はrandomInteger(max) を使用する。


選手はGM

playerIsGM(プレイヤーID)

Player Is GM関数は、ゲーム内のプレイヤーがGMであるかどうかをブール値で返します。 GMがプレイヤーとして再参加したり、プレイヤーがゲームの途中でGMに昇格した場合でも、playerIsGM()はキャッシュをクリアしたり、MOD (API)サンドボックスを再起動することなく、常に正しい答えを返します。


キャラクター

setDefaultTokenForCharacter( 文字, トークン )

指定された Character オブジェクトのデフォルト・トークンを、指定された Token オブジェクトの詳細に設定します。 どちらのオブジェクトもすでに存在していなければならない。 これは、現在その文字に関連付けられているデフォルトのトークンを上書きします。


特殊効果(FX)

spawnFx(x, y, type, pageid)

タイプのx,yの位置に短いエフェクトを発生させる。 pageidを省略するか、'undefined'を渡すと、プレーヤーが現在いるページ(Campaignオブジェクトの'playerpageid')がデフォルトで使用されます。

組み込みエフェクトの場合、タイプは文字列で、以下のいずれかでなければならない:beam-colorbomb-colorbreath-colorbubbling-colorburn-colorburst-colorexplode-colorglow-colormissile-colornova-colorsplatter-color

上記における「色」は、魅力聖なるもの魔法スライム水のいずれかである。

カスタムエフェクトの場合、typeはカスタムエフェクトのcustfxオブジェクトのIDでなければならない。

spawnFxBetweenPoints(point1, point2, type, pageid)

spawnFxと同じ働きをするが、1点の代わりに2点を渡す。 {x: 100, y: 100}. 例:spawnFxBetweenPoints({x: 100, y: 100}, {x: 400, y: 400}, "beam-acid"); エフェクトは、それをサポートするエフェクト(クライアント側でエージェンシーを許可するものと同じもの)に対して、2つのポイント間を「移動」する。

以下のエフェクトタイプは、常にspawnFxの代わりにspawnFxBetweenPointsを使用する必要があります。

spawnFxWithDefinition(x, y, definitionJSON, pageid)

エフェクト定義のJSONを使用して、x,yの位置にアドホックカスタムエフェクトをスポーンする。 pageidを省略するか、'undefined'を渡すと、プレーヤーが現在いるページ(Campaignオブジェクトの'playerpageid')がデフォルトで使用されます。

definitionJSONは、以下のJSON仕様に従ったjavascriptオブジェクトです。 カスタムFX.


ジュークボックス・プレイリスト

playJukeboxPlaylist(プレイリストID)

play関数はプレイリストのフォルダID(Campaignオブジェクトの"_jukeboxfolder "プロパティから取得)を取り込み、ゲーム内の全員にそのプレイリストの再生を開始します。

stopJukeboxPlaylist()

stop関数は引数を必要とせず、再生中のプレイリストを停止します。


その他

sendPing(left、top、pageid、(オプション)playerid、(オプション)moveAll、(オプション)visibleTo)

卓上に「Ping」を送信します(プレイヤーがマウスボタンを押し続けるのと同じです)。 top/left座標と、pingを送るページのpageidを指定しなければならない。 オプションで、pingを実行したプレーヤーのIDを指定することができます。指定しない場合は、"api "とみなされ、pingは黄色になります。

選手のビューもその場所に移動させたい場合は、moveAllオプションに「true」を渡すことができます。

visibleToには、Pingを見ることができる、またはPingによって動かされるプレーヤーのIDを設定することができます。 これは、単一のプレーヤーID、配列、またはカンマ区切りの文字列として表示されます。

on("chat:message", function(msg) {
  // チャットに「!pingtest」と入力してテストを実行する
  if(msg.type == "api" && msg.content.indexOf("!pingtest") !== -1) {
 
    // 特定のプレーヤーを取得するには、findObjs({_type: "player"})[i].第3パラメータにnullの代わりにidを使用
    players = findObjs({_type: "player"});
    player1 = players[1].id;
    player2 = players[2].id;
 
    // 全プレイヤーのIDの配列を作成
    var allPlayerIDs = players.map(function(player) {
      return player['id'];
    });
 
    // このページ上の全員を同じ場所にPing送信します。
    sendPing(300, 300, Campaign().get('playerpageid'), null, true);
    setTimeout(function() {
        // このページの全員を同じ場所にPingする
        sendPing(1500, 500, Campaign().get('playerpageid'), msg.playerid, true, "");
    }, 1000);
    setTimeout(function() {
        // 指定されたプレイヤーのみをこの場所にPing送信
        sendPing(1200, 500, Campaign().get('playerpageid'), null, true, player1);
    }, 2000);
    setTimeout(function() {
        // プレイヤーIDの配列(プレイヤー1とプレイヤー2)をこの場所にPing送信
        sendPing(900, 100, Campaign().get('playerpageid'), player2, true, [player1, player2]);
    }, 3000);
    setTimeout(function() {
        // 文字列として指定されたカンマ区切りのリストをこの場所にPing送信
        sendPing(300, 300, Campaign().get('playerpageid'), player1, true, allPlayerIDs.join());
    }, 4000);
 
  }.
})
 

Roll20の距離とグリッドに関するメモ

Roll20では、"ユニット "は常に画面上の70ピクセルです。 ユニット」は、距離とグリッドがその上に構築される構成要素である。 デフォルトでは

  • 1ユニット=5フィート
  • 1ユニット=1グリッド・マス
  • したがって、5フィート=1ユニット=1平方メートルとなる。

しかし、GMはグリッドの大きさも距離の縮尺も変えることができる。 1ユニットは常に70ピクセルですが、GMは1ユニットを10フィート(70ピクセル=10フィートという意味)にしたり、各グリッドスペースを2ユニット(各グリッドスペースが140ピクセルという意味)にしたりするように設定を変更することができます。

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