キャンペーンオブジェクトには、ゲーム内で利用可能なコマ・マーカー(組み込みおよびカスタム)のリストが格納されています。この情報は_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;
});
});