Roll20 Mod Script 샌드박스는 각 캠페인마다 서버 측 가상 머신을 실행합니다. 스크립트는 플레이어의 컴퓨터에서 실행되지 않습니다. 샌드박스는 한 캠페인의 스크립트가 다른 캠페인에 영향을 미치지 않도록 방지하며, 그렇지 않으면 무한히 실행될 수 있는 스크립트의 실행을 차단합니다.
Mod Script 샌드박스 v1.0과 v1.5는 모두 이 모델을 사용합니다. v1.5에서는 Beacon 시트 접근 기능(getComputed, setComputed, performAction 및 관련 캐릭터 메서드)과 기타 기능들이 추가되었습니다. 게임이 어떤 샌드박스를 사용하는지는, 테이블탑이 ‘점프게이트’인지 여부와는 별개의 문제입니다.
작동 방식
샌드박스가 어떻게 작동하는지에 대한 기술적 세부 사항이 궁금하시다면, 다음의 간단한 다이어그램을 참고해 주세요:
사용자 제작 스크립트 ===> 모드 스크립트 서버 ===> 캠페인 샌드박스 <===> 실시간 동기화 서버
Mod Script 서버는 캠페인의 활동을 감시합니다. 누군가 게임에 접속하면 샌드박스가 시작되고 해당 게임의 모드 스크립트가 로드됩니다. 게임에 플레이어가 없으면 샌드박스가 중단됩니다. 샌드박스를 저장하고 다시 시작하면 스크립트가 다시 실행되고, ready 이벤트가 다시 발생하며, 대기 중인 setTimeout 타이머가 취소됩니다. 샌드박스는 실시간 동기화 서버를 통해 데이터를 주고받으며, 이를 통해 이벤트에 반응하고 게임 상황을 변경합니다.
게임 내의 모든 스크립트는 하나의 전역 범위를 공유합니다. 한 스크립트의 맨 위에 정의된 변수나 함수는 다른 스크립트에서도 볼 수 있으며, 같은 이름을 사용하는 두 스크립트는 서로의 내용을 덮어씁니다. 스크립트의 이름을 비공개로 유지해야 할 경우, 해당 스크립트를 IIFE로 감싸세요. 이 상태는 스크립트 간에도 공유되며 세션 간에도 유지됩니다. Campaign().nodeVersion은 Node.js 버전입니다. require도, DOM도, console.log 도 없습니다. log()를 사용하세요. 처리되지 않은 오류가 발생하면 게임 내 모든 스크립트의 샌드박스가 중단될 수 있습니다. 자세한 내용은 ‘모드 스크립트: 디버깅’을 참조하세요.
일반 자바스크립트의 제한 사항
Roll20 스크립트는 자바스크립트로 작성되지만, 웹사이트용 자바스크립트 프로그래밍에 익숙한 분이라면 유의해야 할 몇 가지 제한 사항이 있습니다. Roll20 스크립트는 Roll20 사이트와 분리된 샌드박스에서 실행됩니다. 이는 당사 시스템과 귀사의 플레이어에게 추가적인 분리 및 보안 레이어를 제공합니다. 이 샌드박스는 다음을 의미합니다:
- HTTP 요청(AJAX)을 수행할 수 없습니다.
- 외부 스크립트나 라이브러리(예: jQuery)를 불러올 수 없습니다. Underscore.js는 이미
_라는전역 변수로 사용할 수 있습니다. underscorejs.org를 참조하십시오. - 이 환경은 자바스크립트 환경이지만, 브라우저 내의 환경은 아니므로 DOM, 페이지 요소, CSS,
document,window등은 존재하지 않습니다.