Roll20 API에 사용자 정의 토큰 마커를 지원하는 새 기능이 추가되었습니다. 이 정보는 캠페인 노드 아래 'token_markers'로 저장됩니다. API를 통해 접근할 수 있습니다.
Campaign().get("token_markers");
이 정보는 읽기 전용입니다.
반환 값은 현재 게임에 존재하는 각 토큰 마커에 대한 객체를 포함하는 문자열화된 JSON 배열입니다.
{
"id":59, // 마커의 데이터베이스 ID (
"name":"Bane", // 마커의 이름 (비고유)
"tag":"Bane::59", // 토큰의 실제 참조 방식
// 커스텀 마커의 경우 ID가 포함되지만,
// 기본 마커의 경우 포함되지 않습니다.
"url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^토큰 마커 이미지의 URL
}
캠페인에서 사용 가능한 토큰 마커를 찾는 방법을 보여주기 위해 예제 스크립트를 작성했습니다.
이 스크립트를 게임에 추가하면 다음 명령어를 사용할 수 있습니다:
!markernames명령어는 모든 마커를 이미지, 이름 및 ID와 함께 채팅에 출력합니다.
!markerids <name>지정된 이름과 일치하는 모든 마커를 채팅에 출력합니다.
!settokenmarker <string> 는 현재 선택된 토큰의 마커 목록에 제공된 문자열을 추가합니다. 이 코드는 토큰 마커가 존재하는지 확인하는 유효성 검사를 수행하지 않으며, 단순히 제공된 값을 토큰 마커에 추가합니다.
!gettokenmarkers는현재 선택된 토큰의 statusmarker 속성을 채팅에 출력합니다
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("채팅: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("Token Markers", 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;
if (msg.selected[0]._type !== "graphic") return;
obj = getObj(msg.selected[0]._type, msg.selected[0]._id);
currentMarkers = obj.get("statusmarkers");
sendChat("토큰 마커", currentMarkers);
});
});
});