ScriptEditorService

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo
Dịch Vụ
Không Sao Chép

Dịch vụ này được sử dụng để tương tác với ScriptDocument.

Tóm Tắt

Phương Pháp

Sự Kiện

Thuộc Tính

Phương Pháp

DeregisterAutocompleteCallback

()
Bảo Mật Plugin

Loại bỏ một cuộc gọi trước đó đã đăng ký với tên name .

Tham Số

name: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

()
Bảo Mật Plugin

Loại bỏ một cuộc gọi trước đó đã đăng ký với tên name .

Tham Số

name: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

ScriptEditorService:DeregisterScriptAnalysisCallback

local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")

FindScriptDocument

Bảo Mật Plugin

Trả về mở ScriptDocument tương ứng với LuaSourceContainer được cung cấp, hoặc nil nếu kịch bản được cung cấp không mở.

Tham Số

Giá Trị Mặc Định: ""

Lợi Nhuận

Mẫu mã

ScriptDocument:CloseAsync

ScriptDocument:CloseAsync

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Find the first open script document
for _, document in documents do
-- The Command Bar can't be closed, so don't select it
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Closed {scriptDocument.Name}`)
else
warn(`Failed to close {scriptDocument.Name} because: {err}`)
end
else
print("No open scripts")
end

Demonstrates using ScriptDocument.ViewportChanged to print the start and end line of the script's viewport when it changes.

To run:

  1. Ensure Output view is open
  2. Run the below code in the Command Bar
  3. Scroll up and down in the opened Script window
Connecting to ScriptDocument.ViewportChanged

--!nocheck
--[[
To run:
1. Ensure Output view is open
2. Run the below code in the Command Bar
3. Scroll up and down in the opened Script window
Print statements from the ViewportChanged event will appear in the Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Create text that spans many lines
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Create a script containing the dummy text and open it
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Failed to open script because: {err}`)
return
end
-- Get a reference to the opened script
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Script Viewport Changed - startLine: {startLine}, endLine: {endLine}`)
end
-- Connect the ViewportChanged event to the function above that prints the start and end line of the updated viewport
scriptDocument.ViewportChanged:Connect(onViewportChanged)

GetEditorSource

Bảo Mật Plugin

Trả về nguồn chỉnh sửa thời gian cho kịch bản đã cho.

Nếu kịch bản được mở trong Trình soạn thảo kịch bản, phương pháp này trả về văn bản đang được hiển thị trong trình soạn thảo.Nếu kịch bản không mở trong trình soạn thảo, phương thức trả về văn bản mà trình soạn thảo sẽ hiển thị nếu nó được mở.Nguồn chỉnh sửa không phải lúc nào cũng phù hợp với thuộc tính Script.Source .

Tham Số

Giá Trị Mặc Định: ""

Lợi Nhuận

GetScriptDocuments

Instances
Bảo Mật Plugin

Trả về một array của các tài liệu kịch bản hiện đang mở, bao gồm thanh lệnh.


Lợi Nhuận

Instances

Mẫu mã

Gets all script documents in the place with ScriptEditorService:GetScriptDocuments() and prints their names.

Print the name of every script

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local scriptDocuments = ScriptEditorService:GetScriptDocuments()
for _, scriptDocument in scriptDocuments do
-- Prints the name of each script
if not scriptDocument:IsCommandBar() then
print(scriptDocument.Name)
end
end

RegisterAutocompleteCallback

()
Bảo Mật Plugin

Đăng ký một cuộc gọi trả lại hoàn thành tự động callbackFunction có tên name với ưu tiên priority .

Khi Trình soạn thảo kịch bản kích hoạt hoàn thành tự động, tất cả các cuộc gọi trả lời tự động đã đăng ký được gọi theo thứ tự tăng dần với yêu cầu hoàn thành tự động và phản hồi.Nhiều cuộc gọi trả lại có thể chia sẻ ưu tiên, nhưng sau đó lịch trình gọi của chúng không thể đoán trước.Mỗi cuộc gọi trả lại là dự định trả lại một bảng trả lời với cùng định dạng như bảng nhập lời trả lời.Các cuộc gọi trả lại không nên xảy ra.Lần gọi lại đầu tiên được kích hoạt nhận được phản hồi của autocomplete nội bộ là bảng phản hồi của nó, và các cuộc gọi lại tiếp theo nhận được sản phẩm của cuộc gọi trước đó là bảng phản hồi của chúng.Các cuộc gọi trở lại có thể thay đổi bảng đã truyền hoặc trả về một bảng mới cùng định dạng.

The callbackFunction phải có đánh máysau: (Request: table, Response: table) -> table

Bảng Yêu cầu có định dạng sau:


type Request = {
position: {
line: number,
character: number
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?
}
}
  • position là vị trí con trỏ có chỉ một chỉ mục nơi bạn đang hoàn thành tự động.
  • textDocument.document là mở ScriptDocument bạn đang hoàn thành, nếu nó tồn tại.
  • textDocument.scriptLuaSourceContainer bạn đang hoàn thành, nếu nó tồn tại.

Nếu cả textDocument.documenttextDocument.script có mặt, thì chúng tương ứng với nhau: req.textDocument.document:GetScript() == req.textDocument.script

Bảng Trả lời có định dạng sau:


type Response = {
items: {
{
label: string, -- The label
kind: Enum.CompletionItemKind?,
tags: {Enum.CompletionItemTag}?,
detail: string?,
documentation: {
value: string,
}?,
overloads: number?,
learnMoreLink: string?,
codeSample: string?,
preselect: boolean?,
textEdit: {
newText: string,
insert: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },
replace: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },
}?
}
}
}
  • Response.items là một array của các mục hoàn thành. Thứ tự của array này không có ý nghĩa, và nó được sử dụng trong trình soạn thảo như người dùng nhập.
  • Response.items[n].label là nhãn của mục được hiển thị trong menu hoàn thành tự động.
  • Response.items[n].kind định nghĩa loại mục hoàn thành tự động này là gì.Chủ yếu, điều này kiểm soát biểu tượng được cung cấp cho mục trong trình soạn thảo.Không phải tất cả các loại đều có biểu tượng duy nhất.Nếu không được định cấu, người biên tập sử dụng biểu tượng "Văn bản".Các loại không được hỗ trợ mặc định hiển thị biểu tượng "Tài sản".
  • Response.items[n].tags đặc trưng một mảng các thẻ mô tả về vật phẩmhoàn thành này. Xem Enum.CompletionItemTag để có chi tiết về chức năng của chúng.
  • Response.items[n].details đặc trưng một chuỗi mô tả chi tiết về vật phẩmhoàn thành.Đối với các mặt hàng mặc định, đây là một biểu diễn chuỗi của đánh máycủa chúng.Lưu ý rằng, để hiển thị widget tài liệu, documentation phải có mặt, nhưng documentation.value có thể trống.
  • Response.items[n].documentation quy định cơ thể chính của tài liệu trong trường value của nó. documentation có hiện diện, ngay cả khi giá trị là trống, vì vậy cửa sổ tài liệu hiển thị nếu chi tiết hoặc quá tải được định nghĩa.
  • Response.items[n].overloads quy định số lượng tràn quá tải của một chức năng hoàn thành tự động.
  • Response.items[n].learnMoreLink liên kết đến một trang liên quan trên tài liệu của người tạo.Địa chỉ URL này phải là yêu cầu https tạo ra.roblox.com; không có URL khác hiển thị trong trình soạn thảo.
  • Response.items[n].codeSample quy định một ví dụ sử dụng hoàn thành vật phẩm. documentation phải không trống để hiển thị trường này.
  • Response.items[n].preselect Nếu đúng, trình soạn thảo sắp xếp mục hoàn thành này trước tất cả những người khác và chọn nó cho người dùng mặc định. Không có hiệu ứng nếu sai hoặc bị thiếu.
  • Response.items[n].textEdit Nếu có, việc chấp nhận hoàn thành áp dụng chỉnh sửa văn bản này - chèn hoặc thay thế khoảng trống giữa các vị trí bắt đầu và kết thúc bằng văn bản mới.

Nếu một cuộc gọi trả về kết quả bị lỗi hoặc gặp phải lỗi, người biên tập loại bỏ bảng trả lời đã sửa đổi và sử dụng danh sách kết quả tự động hoàn thành được xây dựng sẵn.

Tham Số

name: string
Giá Trị Mặc Định: ""
priority: number
Giá Trị Mặc Định: ""
callbackFunction: function
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

ScriptEditorService:RegisterAutocompleteCallback ScriptEditorService:DeregisterAutocompleteCallback

ScriptEditorService:RegisterAutocompleteCallback ScriptEditorService:DeregisterAutocompleteCallback

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
type Request = {
position: {
line: number,
character: number,
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?,
},
}
type Response = {
items: {
{
label: string,
kind: Enum.CompletionItemKind?,
tags: { Enum.CompletionItemTag }?,
detail: string?,
documentation: {
value: string,
}?,
overloads: number?,
learnMoreLink: string?,
codeSample: string?,
preselect: boolean?,
textEdit: {
newText: string,
replace: {
start: { line: number, character: number },
["end"]: { line: number, character: number },
},
}?,
}
},
}
local autocompleteCallback = function(request: Request, response: Response): Response
local item = {
label = "foo",
preselect = true,
}
table.insert(response.items, item)
return response
end
ScriptEditorService:RegisterAutocompleteCallback("foo", 1, autocompleteCallback)
-- To deregister the callback, run the following code in the Command Bar
ScriptEditorService:DeregisterAutocompleteCallback("foo")

RegisterScriptAnalysisCallback

()
Bảo Mật Plugin

Đăng ký một cuộc gọi phân tích kịch bản callbackFunction có tên name với priority .Khi phân tích kịch bản trong Studio chạy, tất cả các cuộc gọi trả lại được đăng ký theo thứ tự tăng dần ưu tiên.Mỗi cuộc gọi trả lại là dự định trả lại một bảng trả lời phù hợp với định dạng được đặc trưng dưới đây.Các cuộc gọi trả lại không nên xảy ra.

Bảng yêu cầu có định dạng sau, nơi scriptLuaSourceContainer sẽ được phân tích.


type Request = {
script: LuaSourceContainer?
}

Bảng trả lời có định dạng sau, nơi diagnostics là một mảng các bảng chẩn đoán. Mỗi bảng chẩn đoán có các mục được liệt kê dưới đây.


type Response = {
diagnostics: {
{
range: {
start: {
line: number,
character: number,
},
["end"]: {
line: number,
character: number,
}
},
code: string?,
message: string,
severity: Enum.Severity?,
codeDescription: { href: string }?
}
}
}
  • range đại diện cho một phạm vi văn bản mà linter nên nhấn mạnh, cung cấp dòng/nhân vật nào bắt đầu nhấn mạnh và dòng/nhân vật nào ngừng nhấn mạnh.
  • code là một nhãn cho tin nhắn.
  • message là một thông điệp cảnh báo để hiển thị cho dòng.Nó cũng sẽ xuất hiện trong phần mô tả công cụ khi người dùng di chuột con trỏ của họ qua dòng trong Trình soạn thảo kịch bản.
  • severity là một giá trị Enum.Severity cho chẩn đoán.Điều này xác định cách chẩn đoán được phân loại trong công cụ Phân tích kịch bản trong Studio, cũng như cách văn bản được tô sáng trong Trình soạn thảo kịch bản.
  • codeDescription liên kết đến một trang liên quan trên tài liệu của người tạo. URL này phải là một yêu cầu https đến create.roblox.com ; không có URL khác hiển thị trong trình soạn thảo.

Tham Số

name: string
Giá Trị Mặc Định: ""
priority: number
Giá Trị Mặc Định: ""
callbackFunction: function
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

ScriptEditorService:RegisterScriptAnalysisCallback

type Request = {
["script"]: LuaSourceContainer,
}
type Response = {
diagnostics: {
{
range: {
start: {
line: number,
character: number,
},
["end"]: {
line: number,
character: number,
},
},
code: string?,
message: string,
severity: Enum.Severity?,
codeDescription: { href: string }?,
}
},
}
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:RegisterScriptAnalysisCallback("foo", 1, function(Req: Request): Response
local response = {
diagnostics = {},
}
local lineNo = 1
-- Iterate line by line
for text, newline in Req.script.Source:gmatch("([^\r\n]*)([\r\n]*)") do
local startIndex, endIndex = string.find(text, "Foo")
if startIndex and endIndex then
table.insert(response.diagnostics, {
range = {
["start"] = {
line = lineNo,
character = startIndex,
},
["end"] = {
line = lineNo,
character = endIndex,
},
},
code = "FooFinder",
message = "Foo found here!",
severity = Enum.Severity.Warning,
})
end
lineNo = lineNo + #newline:gsub("\n+", "\0%0\0"):gsub(".%z.", "."):gsub("%z", "")
end
return response
end)

OpenScriptDocumentAsync

Sinh Lợi
Bảo Mật Plugin

Yêu cầu một Trình soạn thảo kịch bản mở kịch bản được chỉ định.Trả về (true, nil) nếu yêu cầu thành công.Trả về (false, string) nếu yêu cầu thất bại, với một chuỗi mô tả vấn đề.

Nếu kịch bản đã mở, chức năng này thành công và chuyển tab sang trình soạn thảo liên quan.

Tham Số

Giá Trị Mặc Định: ""

Lợi Nhuận

Mẫu mã

ScriptEditorService:OpenScriptDocumentAsync

ScriptEditorService:OpenScriptDocumentAsync

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local Workspace = game:GetService("Workspace")
local newScript = Instance.new("Script")
newScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(newScript)
if success then
print("Opened script document")
else
print(`Failed to open script document: {err}`)
end

UpdateSourceAsync

()
Sinh Lợi
Bảo Mật Plugin

Trả về thời gian chỉnh sửa Script.Source cho kịch bản đã cho.

Chức năng này gọi lại callback đã truyền bằng nội dung cũ của kịch bản để tính toán nội dung mới của kịch bản.

Nếu kịch bản được mở trong Trình soạn thảo kịch bản, thì nó sẽ phát ra yêu cầu cho người biên tập cập nhật nguồn của nó.Người biên tập có thể từ chối cập nhật này nếu thuộc tính Script.Source đã lỗi thời với phiên bản của người dùng của kịch bản khi chức năng này được gọi, trong trường hợp đó, công tác gọi lại sẽ được thực hiện lại và nỗ lực sẽ được lặp lại.

Cuộc gọi trả lại có thể không xảy ra.Nếu callback trả về nil , hoạt động sẽ bị hủy.Chức năng này cho đến khi hoạt động bị hủy bỏ hoặc thành công.

Nếu kịch bản không mở trong trình soạn thảo, các cập nhật nội dung mới sẽ được gửi vào nguồn kịch bản, đó là văn bản mà trình soạn thảo sẽ hiển thị nếu nó được mở.


local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)

Tham Số

Ví dụ kịch bản để được cập nhật.

Giá Trị Mặc Định: ""
callback: function

Chức năng trả về nội dung kịch bản mới.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Sự Kiện

TextDocumentDidChange

Bảo Mật Plugin

Lửa chỉ sau khi thay đổi ScriptDocument một lần. The textChanged là một mảng các cấu trúc thay đổi của định dạng:

{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }

Tham Số

document: ScriptDocument
changesArray: Variant

Mẫu mã

ScriptEditorService.TextDocumentDidChange

ScriptEditorService.TextDocumentDidChange

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidChange:Connect(function(scriptDocument, changes)
print("Changed", scriptDocument, changes)
end)

TextDocumentDidClose

Bảo Mật Plugin

Lửa chỉ trước khi một đối tượng ScriptDocument bị phá hủy, xảy ra ngay sau khi editor kịch bản đóng.Sau sự kiện này bắt lửa, ScriptDocument đi vào trạng thái "Đã đóng" và cố gọi các phương pháp của nó thả một lỗi.ScriptDocument các đối tượng không thể tái sử dụng, ngay cả khi trình soạn thảo kịch bản mở lại cùng một kịch bản.

Tham Số

oldDocument: ScriptDocument

Mẫu mã

ScriptEditorService.TextDocumentDidClose

ScriptEditorService.TextDocumentDidClose

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)

TextDocumentDidOpen

Bảo Mật Plugin

Lửa chỉ xảy ra ngay sau khi một đối tượng ScriptDocument được tạo và gán cho dịch vụ, xảy ra ngay sau khi trình soạn thảo kịch bản mở.

Tham Số

newDocument: ScriptDocument

Mẫu mã

ScriptEditorService.TextDocumentDidOpen

ScriptEditorService.TextDocumentDidOpen

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)