API: 채팅

이 페이지는 Roll20 API의 채팅 기능과 관련된 세부 사항을 설명합니다.


채팅 이벤트

채팅:메시지

새로운 채팅 메시지를 수신할 때마다 트리거됩니다. 메시지 유형이 "rollresult" 또는 "gmrollresult"인 경우, 메시지 내용에JSON.parse()를 호출하여 주사위 결과 정보를 포함하는 객체를 얻어야 합니다.

참고:플레이어가 느낌표(!)로 시작하는 채팅 메시지를 입력하면, 해당 메시지는 "api" 유형으로 처리되어 누구에게도 표시되지 않습니다. 이 기능은 모드(API) 스크립트가 응답하는 명령어를 제공하기 위해 사용될 수 있도록 설계되었습니다. 따라서 메시지 유형이 "api"인 경우, 해당 메시지는 누구에게도 표시되지 않았으며, 채팅 메시지를 보낸 플레이어는 아마도 메시지 결과로 모드(API) 스크립트가 어떤 작업을 수행하기를 기대하고 있을 것입니다.

콜백 매개변수:

부동산 기본값 참고
누가 "" 메시지를 보낸 플레이어 또는 캐릭터의 표시할 이름.
플레이어 ID   메시지를 보낸 플레이어의 ID.
유형 "일반" "일반", "롤결과", "GM롤결과", "이모트", "귓속말", "설명", 또는 "API" 중 하나.
내용 "" 채팅 메시지의 내용. 타입이"rollresult"인 경우, 이는 주사위 굴림에 관한 JSON 문자열 데이터가 될 것입니다.
원본롤   (단, "rollresult" 또는 "gmrollresult"만 입력)플레이어가 "/r 2d10+5 fire damage"라고 입력했을 때의 원본 주사위 결과 텍스트, 예: "2d10+5 화염 피해". 이는 "rollresult" 또는 "gmrollresult" 유형이 아닌 메시지의콘텐츠사용과 동일합니다.
인라인 롤   (콘텐츠에는 하나 이상의 인라인 롤만 포함됨)메시지 내 모든 인라인 롤에 대한 정보를 포함하는 객체 배열.
롤 템플릿   (콘텐츠에는 하나 이상의 롤 템플릿만 포함됨)지정된 템플릿의 이름.
목표   (귓속말만 입력)귓속말이 전송되는 대상의 플레이어 ID. 귓속말 메시지가 GM의 표시할 이름을 사용하지 않고 전송된 경우(예: GM이 Riley일 때 "/w Riley text" 대신 "/w gm text"로 전송), 또는 플레이어가 제어하지 않는 캐릭터에게 귓속말 메시지가 전송된 경우, 해당 값은 "gm"으로 표시됩니다.
대상 이름   (귓속말만 입력)귓속말이 전송된 플레이어 또는 캐릭터의 표시할 이름.
선택된   (단어 "api"만 입력)명령어가 입력되었을 때 사용자가 선택한 객체들의 배열.

참고: 이 모든 정보가 필요하지 않을 수 있습니다. 대부분의 경우 주사위 굴림의 전체 결과만 관심 있을 것입니다(첫 번째 예시 하단 참조). 그러나 주사위 결과에 대해 정말 깊이 파고들고 싶다면 모든 것이 제공됩니다.

 


주사위 결과 구조 예시 1

호출한 후 JSON.parse 를 호출한 후 content 속성에 호출하면 다음과 같은 형식의 객체를 얻을 수 있습니다 (이것은 /roll {2d6}+5+1t[weather] 공격!)

{
  "type":"V", //"V" = "Validated Roll" (현재는 항상 "V"입니다)
  "rolls": [
    {
      "type":"G", //"G"는 그룹화된 롤을 나타냅니다. 그룹은 롤 내부의 일련의 "하위 롤"과 같습니다.
      "rolls": [
        [
          {
            "type":"R", //"R" = "Roll"
            "dice":2, // 던진 주사위 개수 (2dX는 2개의 주사위)
            "sides":6, //주사위의 면 수 (Xd6는 6면)
            "mods":{},
            "results": [ //각 던지기의 결과 배열.
             {
               "v":1 // 첫 번째 2d6 주사위에서 1이 나왔습니다
             },
             {
               "v":5 // 두 번째 2d6 주사위에서 5가 나왔습니다
             }
            ]
          }
        ]
      ],
      "mods":{},
      "resultType":"sum", //결과는 합계입니다 (성공 여부 확인이 아님).
      "results": [
        {
          "v":6 // 이 경우, 그룹의 전체 결과(총합)입니다.
        }
      ]
    },
    {
      "type":"M", //"M" = 수학 표현식
      "expr":"+5+"
    },
    {
      "type":"R", //"R" = 주사위 굴림
      "dice":1,
      "table":"weather", //테이블 속성은 이 롤이 테이블에 대해 수행된 경우 사용된 테이블의 이름으로 설정됩니다.
      "mods":{},
      "sides":2, //테이블 롤의 경우 이 부분은 무시해도 됩니다.
      "results": [
        {
          "v":0, //테이블 항목의 "값"이 굴려진 결과 텍스트 테이블의 경우 항상 0입니다.
          "tableidx":1, //테이블에서 굴려진 항목의 인덱스.
          "tableItem": { //테이블이 롤링되었을 당시 존재했던 테이블 항목 객체의 복사본입니다.
            "name":"rainy", 
            "avatar":"", //목록에서 뽑기가 이미지 아이콘을 사용하는 경우 이미지 URL이 될 것
            "weight":1,
            "id":"-IpzPx2j_9piP09ceyOv"
          }
        }
      ]
    },
    {
      "type":"C", // "C" = Comment
      "text":" Attack!"
    
  ],
  "resultType":"sum", // 전체 롤의 종합 결과 유형
  "total":11 // 전체 롤의 종합 합계 (모든 하위 그룹 포함)
}

롤 결과 구조 예시 2

다음 결과에 대한 주석 구조 /roll {1d6!!>5}>6 (폭발 수정 및 대상 성공 표시):

{
  "type":"V",
  "rolls": [
    {
      "type":"G",
      "rolls": [
        [
          {
            "type":"R",
            "dice":1,
            "sides":6,
            "mods": { //롤에 대한 수정 사항
              "compounding": { //"compounding" = "폭발 롤의 중첩 적용(!!)"
                "comp":">=", //비교 유형
                "point":5 //비교 점수
              }
            },
            "results": [
              {
                "v":13 //전체 주사위 결과. 복합 폭발이므로 주사위 결과는 단 하나뿐임을 유의하십시오.
              }
            ]
          }
        ]
      ],
      "mods": {
        "success": {
          "comp":">=",
          "point":6
        }
      },
      "resultType":"sum",
      "results": [
        {
          "v":13
        }
      ]
    }
  ],
  "resultType":"success", // 이 경우 결과는 성공 건수입니다
  "total":1 //총 성공 건수
}

채팅 이벤트 예시 (사용자 정의 롤 유형 구현)

on("채팅:message", function(msg) {
  //이것은 플레이어가 !sr을 입력할 수 있게 합니다 <number> 목표값 4로 d6 주사위 여러 개를 굴립니다.
  if(msg.type == "api" && msg.content.indexOf("!sr ") !== -1) {
    var numdice = msg.content.replace("!sr ", "");
    sendChat(msg.who, "/roll " + numdice + "d6>4");
  }
});

sendChat(말하는_아이디, 입력 [, 콜백 [, 옵션]] )

이 기능을 사용하여 채팅 메시지를 보낼 수 있습니다.

말하기 다음 중 하나일 수 있습니다:

  • 어떤 문자열이든, 이 경우 해당 문자열이 메시지를 보낸 사람의 이름으로 사용됩니다. 예를 들어 "라일리"
  • 플레이어 ID는"player|-Abc123"형식으로 표기되며, 여기서 "-Abc123"은 플레이어의 ID입니다. 이렇게 하면 플레이어의 아바타와 이름이 자동으로 사용됩니다.
  • 캐릭터의 ID는"캐릭터|-Abc123" 형식으로 표기됩니다. 이렇게 하면 캐릭터의 아바타와 이름이 자동으로 사용됩니다.


입력 Roll20 앱에서 사용되는 것과 마찬가지로 유효한 표현이어야 합니다. 기본 메시지를 보내려면 텍스트를 입력하거나, "/roll", "/em", "/w" 등과 같은 슬래시 명령어를 사용합니다. 추가로:

  • 캐릭터 속성은@{CharacterName|AttributeName} 형식으로 사용할 수 있습니다.
  • 캐릭터 능력을 다음과 같은 형식으로 사용할 수 있습니다:%{CharacterName|AbilityName}.
  • 매크로를 사용할수 없습니다.
  • "/direct <msg>" 명령어를 사용하면 URL 자동 연결 같은 처리 없이 메시지를 보낼 수 있으며, 메시지 내에서 다음 HTML 태그를 사용할 수 있습니다:

 

<code><span><div><label><a><br><br/><p><b><i><del><strike><u><img>
<blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup>
<sub><big><pre><figure><figcaption><strong><em><table><tr><td><th>
<tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

콜백 선택적 세 번째 매개변수로,sendChat()호출 결과를 게임에 명령을 전송하는 대신 전달받을 콜백 함수로 구성됩니다. 이 방식으로sendChat()을 사용하는 것은 비동기적입니다. sendChat()명령어의 결과는 작업들의 배열(ARRAY)이 되며, 각 개별 객체는채팅:메시지이벤트(위 참조) 중에 수신하는 객체와 동일합니다.

예를 들어, Roll20 주사위 엔진을 사용하여 주사위를 굴린 후 즉시 결과를 확인할 수 있습니다. 그런 다음 게임 내 플레이어에게 전송하기 전에 롤에 추가 수정을 가할 수 있습니다.

sendChat("Riley", "/roll 1d20+4", function(ops) {
    // ops는 명령어 결과의 배열이 될 것입니다.
    var rollresult = ops[0];
    //이제 rollresult로 무언가를 수행하세요. 마치 채팅:message 이벤트 중에 하듯이...
});

options 메시지 처리 방식을 설정하는 선택적 네 번째 매개변수입니다. 옵션은 자바스크립트 객체로 지정되며, 그 속성들은 설정할 옵션의 이름이고 값들은 해당 옵션의 설정값입니다. 일반적으로true로지정되며, 기본값은 false입니다.

사용 가능한 옵션:

  • noarchive -- 이 옵션을 true로 설정하면 메시지가 채팅 기록에 저장되지 않습니다. 이는 특히 스토리의 일부가 아닌 출력(예: 모드(API) 버튼 메뉴 및 상태 정보)에 유용합니다.
  • use3d-- 이제 sendChat() 함수를 사용하여 3D 주사위 굴림을 생성할 수 있습니다. 구문은 간단합니다:sendChat("이름", "[[3d6]] 굴리기", null, {use3d: true});이름 매개변수에 플레이어 ID를 전달하면 (예:sendChat("player|-ABC123",...)), 해당 플레이어의 색상이 주사위에 적용됩니다. 그렇지 않으면 기본 흰색이 사용됩니다. 

    참고:클라이언트는 한 번에 하나의 3D 주사위 결과만 표시할 수 있으므로, 연속으로 여러 개의 별도 3D 주사위를 굴리는 것은 유용하지 않습니다. 또한 3D 롤을 사용하면 양자 주사위 서버에 다소 부담이 가해진다는 점을 유의하시기 바랍니다. 따라서 판단을 잘 내리시고 1초 동안 100번의 3D 롤을 수행하지 마십시오. 플레이어에게 롤이 "중요"하고 게임에 영향을 미칠 때 3D 롤을 사용하십시오.

    이러한 옵션을 조정하고 싶지만콜백매개변수(세 번째 매개변수—위 참조)를 사용하지 않으려면, 해당 위치에null을전달하기만 하면 됩니다:

 

sendChat("상태", "모든 플레이어가 로그인되었습니다.", null, {noarchive:true});

모드(API) 명령 버튼

업데이트된 '홀딩' 기능으로 이제 채팅 창에 "모드(API) 명령 버튼"을 생성할 수 있습니다. API 생성 메시지와 매크로/스킬 생성 메시지 모두에서 새로운 텍스트 채팅 서식을 활용하세요.

이를 마크다운 서식으로 수행하려면:

[공격 주사](!attackroll)

괄호 안의 텍스트는 버튼에 표시되며, 괄호 안의 부분은 실행될 명령어입니다. 일반 롤에는 무엇이든 포함시킬 수 있습니다(매크로, 능력, 쿼리 등). 다만 해당 명령어 자체는 이를 클릭한 플레이어가 실행하게 된다는 점을 명심하세요. 예를 들어, 메시지를 볼 수 있는 모든 사람이 해당 캐릭터에 접근할 수 없다면 @{Character|AC} 를 포함하지 마십시오. 대신, 채팅 메시지를 보내기 전에 직접 입력하여 명령을 보낼 당시 존재했던 실제 값을 포함시키세요. 이 버튼들은 모든 메시지 유형(일반 메시지, 귓속말, GM 귓속말 등)에서 작동합니다.

/direct 명령어로 메시지를 보낼 경우, 해당 메시지에 대한 마크다운 구문 분석은 수행되지 않으므로 직접 ` <` 및 `> ` 태그를 포함시켜야 합니다. 다음은 그 예시입니다:

<a href="!attackroll">공격 주사위 굴리기</a>

채팅에서 모드(API) 버튼 입력

채팅창에 마크다운 구문 모드(API) 버튼을 입력하여 다른 사람들이 사용할 수 있도록 할 수도 있습니다. 채팅 파서가 해석할 것이므로, 버튼 클릭 시 속성, 쿼리 및 주사위 굴림이 확장되도록 하려면 명령어 일부를 특수 구문(HTML 엔티티)으로 입력해야 합니다:

캐릭터 교체
 % &#37;
) &#41;
 ? &#63;
@ &#64;
[ &#91; 또는 &lbrack;
] &#93; 또는 &rbrack;

이 샘플 버튼은 그 중 일부를 사용합니다:

[공격 주사위 굴리기](!attackroll &#64;{target|token_id} &#91;[1d6+&#63;{Bonus|0}]&#93;)

실제로 모드(API) 버튼을 사용하여 매크로나 능력을 호출할 수 있습니다.

캐릭터 교체
<carriage return> &#13;

이를 위해 명령어 부분을 특수 코드!&#13;로 시작한 다음, 매크로 호출은#또는 능력 호출은&#37;(%)로 추가하면 됩니다.

[매크로](!&#13;#MacroName)

[능력](!&#13;&#37;{CharName|AbilityName})

참고: 현재 사이드바의 '컬렉션' 탭에 저장된 매크로를 다시 열면 내부의 HTML 엔티티가 원래 상태로 복원됩니다. 이후 매크로를 저장하면 이러한 복원 상태도 함께 저장됩니다. 이러한 행동은 능력 또는 능력 명령 버튼에서는 발생하지 않습니다.

For 능력 명령 버튼의 경우, 버튼을 생성하는 능력과 참조하는 능력이 동일한 시트에 있을 때 구문은 매우 간단합니다:

[능력](~AbilityName)

도움이 되었습니까?
24명 중 17명이 도움이 되었다고 했습니다.