Modスクリプト:コマ・マーカー

キャンペーンオブジェクトには、ゲーム内で利用可能なコマ・マーカー(組み込みおよびカスタム)のリストが格納されています。この情報は_token_markers として保存されます。読み取り専用です。 Modスクリプトから次のようにアクセスします:

Campaign().get("_token_markers");

戻り値は、現在ゲーム内に存在する各コマ・マーカーに対応するオブジェクトを含む、文字列化されたJSON配列です。

{
    "id": 59, // マーカーのデータベースID
    "name": "Bane", // マーカーの名前(一意ではない)
    "tag": "Bane::59", // トークンが実際に参照される方法
        // これにはカスタムマーカーのIDが含まれますが、
        // デフォルトのマーカーのIDは含まれません。
    "url": "https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
    // ^コマ・マーカーの画像のURL
}

キャンペーン内で利用可能なコマ・マーカーを見つける方法の例を示すため、サンプルスクリプトを作成しました。

このスクリプトをゲームに追加すると、以下のコマンドが利用可能になります:

!markernamesを実行すると、すべてのマーカーの画像、名前、IDがチャットに出力されます

!markeridsと入力すると、指定された名前と一致するマーカーがすべてチャットに出力されます

!settokenmarker は、指定された文字列を現在選択されているコマのステータスマーカー一覧に追加します。この処理はコマ・マーカーが存在するかどうかを検証せず、単に提供された値をコマ・マーカーに追加するだけです。

!gettokenmarkers は、現在選択されているコマのstatusmarkers能力値をチャットに出力します





    on("ready", () => {
  const tokenMarkers = JSON.parse(Campaign().get("_token_markers"));
  const getChatMessageFromTokenMarkers = markers => {
    let chatMessage = '';
    _.each(markers, marker => {
      chatMessage += `<p><img src='${marker.url}'> ${marker.id}: ${marker.name}</p>`;
    });
    return chatMessage;
  };
  on("chat:message", msg => {
    if (msg.content.split(" ")[0].toLowerCase() === '!markernames') {
      let chatMessage = getChatMessageFromTokenMarkers(tokenMarkers);
      sendChat("コマ・マーカー", chatMessage);
    } else if (msg.content.split(" ")[0].toLowerCase() === '!markerids') {
      const markerName = msg.content.split(" ")[1].toLowerCase();
      let results = [];
      _.each(tokenMarkers, marker => {
        if (marker.name.toLowerCase() === markerName) results.push(marker);
      });
      log(results);
      let chatMessage = getChatMessageFromTokenMarkers(results);
      chatMessage = chatMessage || '一致するコマ・マーカーが見つかりませんでした'
      sendChat("コマ・マーカー", chatMessage);
    } else if (msg.content.split(" ")[0].toLowerCase() === '!settokenmarker') {
      const markerName = msg.content.split(" ")[1].toLowerCase();
      if (!msg.selected && msg.selected[0]._type == "graphic") return;
      obj = getObj(msg.selected[0]._type, msg.selected[0]._id);
      currentMarkers = obj.get("statusmarkers").split(',');
      currentMarkers.push(markerName);
      obj.set("statusmarkers", currentMarkers.join(','));
    } else if (msg.content.split(" ")[0].toLowerCase() === '!gettokenmarkers') {
      if (!msg.selected) return;

 });
});
この記事は役に立ちましたか?
38人中9人がこの記事が役に立ったと言っています