콘텐츠로 이동

인터프리터 켜기

인터프리터는 Execute 능력이 있는 사람이 서버나 자기 클라이언트에서 짧은 Luau 코드를 실행할 수 있는 기능입니다. 사용법은 Interpreter 창에서 다루고, 이 페이지에서는 게임 쪽에서 켜는 방법을 설명합니다.

인터프리터는 기본으로 꺼져 있습니다. Start에 컴파일러 모듈을 넘길 때만 켜집니다.

Devplorer.Start({
Provider = provider,
Audit = audit, -- 인터프리터를 켰다면 함께 넘기세요
Interpreter = { Compiler = game.ServerStorage.LuauCompiler },
})

넘기지 않으면 인터프리터 요청은 모두 거절되고, 화면에도 Interpreter 창 항목이 없습니다.

컴파일러는 LuauCeption 릴리스의 Compiler 모듈입니다. 이 저장소는 0.654로 고정해 쓰며, scripts/vendor.sh가 vendor/luauception/Compiler.luau로 내려받습니다.

  • 다운로드 주소: https://github.com/RadiatedExodus/LuauCeption/releases/download/0.654/Luau.LuauCeption.Compiler.0.654.luau
  • 크기는 약 3MB입니다. 처음 쓸 때 require하므로 첫 실행이 조금 느립니다.
  • 게임에는 ModuleScript로 넣습니다. 예를 들어 Rojo로 ServerStorage.LuauCompiler에 연결할 수 있습니다.
"LuauCompiler": {
"$path": "devplorer/vendor/luauception/Compiler.luau"
}

devplorer는 LoadStringEnabled를 켜지 않으며, loadstring을 사용하는 경로도 없습니다. 대신 컴파일러로 바이트코드를 만들어 Fiu 인터프리터로 실행합니다. Server 아래의 Fiu 모듈이 이 인터프리터입니다(설치의 프로젝트 트리에 포함되어 있습니다).

  • 컴파일은 서버에서만 합니다. 클라이언트는 소스(글)만 보냅니다. 서버는 클라이언트가 만든 바이트코드를 받지 않습니다.
  • 서버 대상: 서버가 Fiu로 실행합니다. 코드에서 player(실행한 사람)와 selection(그 사람이 서버 Explorer에서 선택한 인스턴스)을 쓸 수 있습니다. print와 warn은 실행한 사람의 창에 표시됩니다. 나머지 전역과 require는 서버 스크립트와 같습니다.
  • 클라이언트 대상: 서버는 바이트코드만 돌려주고, 해당 클라이언트가 자신의 Fiu로 실행합니다.
  • Fiu는 Execute 능력이 있고 인터프리터가 켜진 사람의 번들에만 들어갑니다. 에이전트 모드에서는 Execute가 제외되므로 인터프리터도 쓸 수 없습니다.
  • 컴파일러가 지원하는 문법만 쓸 수 있습니다. 예를 들어 0.654는 const를 컴파일하지 못하므로 local을 써야 합니다.
항목 값
소스 길이 20,000바이트까지
실행 빈도 사람마다 순간 5번, 이후 2초에 1번
서버 대상 동시 실행 사람마다 1개
yield 없이 연속으로 실행되는 시간 2초를 넘으면 중단합니다(기다린 시간은 포함하지 않습니다)
명령 전체 시간 30초를 넘으면 중단합니다
결과 값 20개, 출력 200줄, 글 하나 2000바이트까지

서버 대상과 클라이언트 대상 모두, 실행할 때마다 Execute 종류로 기록됩니다. 기록은 코드를 실행하기 전에 남으므로, 명령이 서버를 멈추더라도 남아 있습니다.

위치 내용
서버 출력 실행한 사람의 이름과 UserId, 대상(server/client), 소스의 바이트 길이, 검사합(fnv), 소스의 앞부분과 끝부분(줄바꿈은 ?로 표시)
Audit 후크의 Data Target과 Source(소스 전체)

Audit 후크를 넘기지 않으면 소스 전체는 어디에도 남지 않습니다. Start가 이 경우 경고를 출력합니다.

Audit = function(entry)
if entry.Kind == "Execute" then
MyLogger.write(entry.UserId, entry.Data.Target, entry.Data.Source)
end
end,