Modスクリプト:サンドボックスモデル

「Roll20 Mod Script サンドボックス」では、キャンペーンごとにサーバーサイドの仮想マシンを実行します。スクリプトはプレイヤーのコンピュータ上では実行されません。サンドボックス機能により、あるキャンペーンのスクリプトが別のキャンペーンに影響を与えるのを防ぎ、また、そうでなければ無限に実行され続けるようなスクリプトを停止させます。

Mod Script サンドボックス v1.0 および v1.5 では、この同じモデルが採用されています。 v1.5では、Beaconシートへのアクセス機能(getComputed、setComputed、performAction、および関連するキャラクターメソッド)に加え、その他の機能も追加されました。ゲームがどのサンドボックスを採用しているかは、その卓上が『Jumpgate』であるかどうかとは別問題です。

仕組み

サンドボックスの仕組みに関する技術的な詳細にご興味をお持ちの方は、以下の簡単な図をご覧ください:

ユーザー作成のスクリプト ===> Modスクリプトサーバー ===> キャンペーンサンドボックス <===> リアルタイム同期サーバー

Mod Script Serverは、キャンペーンでのアクティビティを監視しています。誰かがゲームに参加すると、サンドボックスが起動し、そのゲームのModスクリプトが読み込まれます。ゲームが空になると、サンドボックスは停止します。サンドボックスを保存して再起動すると、スクリプトが再度実行され、readyイベントが再度発生し、保留中のsetTimeoutタイマーが解除されます。サンドボックスは、リアルタイム同期サーバーを介してデータの送受信を行い、それによってイベントに応答し、ゲームの状態を変更します。

ゲーム内のすべてのスクリプトは、1つのグローバルスコープを共有しています。あるスクリプトの先頭に定義された 変数や関数は、他のスクリプトからも参照可能であり、同じ名前を使用する2つのスクリプトは互いに上書きし合います。スクリプトを非公開にしておく必要がある場合は、そのスクリプトをIIFEで囲んでください。この状態はスクリプト間で共有され、セッションをまたいで保持されます。 Campaign().nodeVersionは Node.js のバージョンです。 requireもDOMもconsole.logもありません。代わりにlog()を使用してください。未処理のエラーが発生すると、ゲーム内のすべてのスクリプトのサンドボックスが停止する可能性があります。詳しくは「Modスクリプト:デバッグ」を参照してください。

通常のJavaScriptからの制限

Roll20のスクリプトはJavaScriptで書かれていますが、Webサイト向けのJavaScriptプログラミングに慣れている場合は、知っておくべきいくつかの制限があります。 Roll20スクリプトは、Roll20サイトとは別のサンドボックス環境で実行されます。これにより、当社のシステムとプレイヤーの皆様に対して、追加の分離レイヤーとセキュリティが提供されます。このサンドボックスは次のことを意味します:

  • HTTPリクエスト(AJAX)を送信することはできません。
  • 外部のスクリプトやライブラリ(jQueryなど)を読み込むことはできません。 Underscore.js は、すでに_というグローバル変数として利用可能です。 underscorejs.org を参照してください。
  • 実行環境はJavaScriptですが、ブラウザ内の環境ではないため、DOM、ページ要素、CSS、document、windowなどは存在しません。
この記事は役に立ちましたか?
56人中40人がこの記事が役に立ったと言っています