모드 스크립트: 토큰 마커

캠페인 객체는 게임에서 사용할 수 있는 토큰 마커(내장 및 사용자 정의) 목록을 저장합니다. 이 정보는 _ token_markers로 저장됩니다. 읽기 전용입니다. 모드 스크립트에서 다음과 같이 호출하세요:

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;
      if (msg.selected[0]._type !== "graphic") return;
      obj = getObj(msg.selected[0]._type, msg.selected[0]._id);
      currentMarkers = obj.get("statusmarkers");
    sendChat("토큰 마커", currentMarkers);
  }   });
});
도움이 되었습니까?
38명 중 9명이 도움이 되었다고 했습니다.