콘텐츠로 이동

클라이언트 액션

디버그 액션은 서버에서 실행됩니다. 카메라나 PlayerGui처럼 해당 클라이언트에서만 할 수 있는 확인은 클라이언트 액션으로 만들 수 있습니다.

클라이언트 액션은 명령 팔레트에서 서버 액션과 같은 목록에 표시되며, 어디서 실행되는지도 함께 표시됩니다.

ModuleScript를 만들고 Start의 ClientActions에 넘깁니다.

Devplorer.Start({
Provider = provider,
ClientActions = {
{ Module = game.ServerStorage.QAClientActions, MinLevel = "Tester" },
},
})
필드 설명
Module 정의 목록을 돌려주는 ModuleScript. 필수.
MinLevel 이 레벨 이상인 사람의 창에만 모듈을 보냅니다. 기본값은 "Developer".
  • 서버는 이 모듈을 require하지 않습니다.
  • 창을 열 때, 레벨이 MinLevel 이상인 사람의 번들에만 모듈을 복제합니다. 상위 레벨용 코드는 하위 레벨에게 전달되지 않습니다.
  • 에이전트 모드에서는 보내지 않습니다.
  • 모듈은 ServerStorage나 ServerScriptService 아래에 두어야 합니다. 복제되는 위치에 두면 누구나 코드를 읽을 수 있어 Start가 거절합니다.
  • 창을 열 때마다 모듈의 위치를 다시 확인합니다. 옮겨졌거나 복제되지 않으면 그 묶음만 빼고 경고를 한 번 출력합니다.

모듈은 정의 목록을 돌려주거나, api를 받아 정의 목록을 돌려주는 함수를 돌려줍니다. api.ActionFail(이유)와 api.ArgFail(인자, 이유)는 서버 액션의 Devplorer.ActionFail, Devplorer.ArgFail과 같습니다.

type Api = {
ActionFail: (message: string) -> never,
ArgFail: (arg: number | string, reason: string) -> never,
}
return function(api: Api): { any }
return {
{
Name = "Camera info",
Group = "Client",
Description = "Print this client's camera position, look direction and field of view",
Run = function()
local camera = workspace.CurrentCamera
if camera == nil then
api.ActionFail("there is no camera")
end
local cf = (camera :: Camera).CFrame
return `pos {cf.Position}, look {cf.LookVector}, fov {(camera :: Camera).FieldOfView}`
end,
},
{
Name = "Set field of view",
Group = "Client",
Description = "Change this client's camera field of view",
Args = {
{ Name = "Degrees", Type = "Number", Min = 1, Max = 120, Default = 70 },
},
Check = function(_player, args)
if args.Degrees < 20 then
api.ArgFail("Degrees", "use 20 or more")
end
end,
Run = function(_player, args)
local camera = workspace.CurrentCamera
if camera == nil then
api.ActionFail("there is no camera")
end
local target = camera :: Camera
local before = target.FieldOfView
target.FieldOfView = args.Degrees
return `field of view {before} -> {args.Degrees}`
end,
},
}
end

정의의 형식과 인자 타입은 서버 액션과 같습니다(디버그 액션). 쓸 수 있는 키는 Name, Group, Description, Confirm, Cooldown, Timeout, Check, Args, Run입니다.

  • Run(player, args)의 player는 그 클라이언트의 LocalPlayer입니다.
  • MinLevel, Allow, LiveCheck는 쓸 수 없으며, 쓰면 그 정의는 오류로 제외됩니다. 접근은 묶음 단위의 MinLevel로 제어합니다.
  • 정의는 클라이언트가 같은 스키마로 검사합니다. 잘못된 정의는 그 묶음의 불러오기 오류로 표시되고, 나머지 정의는 그대로 남습니다.
  • 제한 시간과 쿨다운 규칙은 서버 액션과 같습니다.
  • 인스턴스 인자는 클라이언트 Explorer의 인스턴스입니다.
  • 이름이 내장 명령이나 서버 액션과 겹치면 그 클라이언트 액션은 제외되고 오류로 표시됩니다. 클라이언트 액션끼리 겹치면 먼저 등록된 것이 남습니다.

클라이언트 액션은 해당 사용자의 클라이언트가 할 수 있는 일만 할 수 있으며, 서버 권한은 없습니다. 그래서 사용할 수 있는지는 그 코드를 받았는지로 결정됩니다.

액션을 실행하면 클라이언트가 서버에 실행 사실을 보고하고, 서버는 이를 ClientAction 종류로 감사 기록에 남깁니다.

client action "Camera info" (Ok), reported by the client

서버는 클라이언트 액션을 하나도 받지 않은 창의 보고를 거절하고, 보고 빈도를 버스트 10, 초당 1로 제한합니다.