API: 토큰 마커

롤20 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("준비", () => {

    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;

            if (msg.selected[0]._type !== "graphic") return;

            obj = getObj(msg.selected[0]._type, msg.selected[0]._id);

            currentMarkers = obj.get("statusmarkers");

            sendChat("토큰 마커", currentMarkers);

        }

    });

});
 
도움이 되었습니까?
36명 중 8명이 도움이 되었다고 했습니다.