인터프리터 켜기
인터프리터는 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"}loadstring은 켜지 않습니다
섹션 제목: “loadstring은 켜지 않습니다”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) endend,