ScriptEditorService
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
บริการนี้ใช้สำหรับการโต้ตอบกับตัวอินสแตนซ์ ScriptDocument
สรุป
วิธีการ
ลบคำเรียกแบบเก่าที่ลงทะเบียนไว้ก่อนหน้านี้ด้วยชื่อ name
ลบคำเรียกแบบเก่าที่ลงทะเบียนไว้ก่อนหน้านี้ด้วยชื่อ name
กลับค่า ScriptDocument ที่เปิดตรงกับ LuaSourceContainer หรือปุ่มเริ่มต้นหากสคริปต์ที่ให้ไม่เปิด
กลับไปที่เวลาแก้ไขสำหรับสคริปที่ให้
กลับรายการของสคริปต์ที่เปิดอยู่ในขณะนี้ รวมถึงแถบคําสั่ง
ลงทะเบียนคืนหนึ่ง autocomplete คืน callbackFunction ที่มีชื่อว่า name ด้วยความสามารถในการกรอกอัตโนมัติ priority .
ลงทะเบียนการโอนความคิดเห็นของสคริปต์ callbackFunction ที่มีชื่อว่า name ด้วย priority
คำขอที่เครื่องมือเขียนสคริปต์เปิดสคริปต์ที่กำหนด กลับ (ใช่, ไม่มี) หากคำขอสำเร็จ กลับ (ปลอม, สตริง) หากคำขอล้มเหลวด้วยสตริงที่อธิบายปัญหา
สร้างเนื้อหาใหม่จากสคริปเก่าและปรับปรุงเครื่องมือเขียนสคริปต์หากมันเปิดอยู่หรือ Script ริงค์อินสแตนซ์หากเครื่องมือเขียนสคริปต์ถูกปิด
อีเวนต์
เพิ่มเพียงหลังจากการเปลี่ยนแปลง ScriptDocument
จะเกิดขึ้นเพียงก่อนวัตถุ ScriptDocument จะถูกทำลายซึ่งเกิดขึ้นหลังจากที่เครื่องมือเว็บสกริปต์ปิด
เกิดขึ้นเพียงหลังจากที่วัตถุ ScriptDocument นี้ได้รับการสร้างและมีส่วนเกี่ยวข้องกับบริการซึ่งเป็นส่วนหลังของเครื่องมือเลขานุกรมเปิดตัว
คุณสมบัติ
วิธีการ
DeregisterAutocompleteCallback
ลบคำเรียกแบบเก่าที่ลงทะเบียนไว้ก่อนหน้านี้ด้วยชื่อ name
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
ลบคำเรียกแบบเก่าที่ลงทะเบียนไว้ก่อนหน้านี้ด้วยชื่อ name
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
กลับค่า ScriptDocument ที่เปิดตรงกับ LuaSourceContainer หรือปุ่มเริ่มต้นหากสคริปต์ที่ให้ไม่เปิด
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!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
--!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
กลับไปที่เวลาแก้ไขสำหรับสคริปที่ให้
หากสคริปต์เปิดใน เครื่องมือเขียนสคริปต์ วิธีนี้จะส่งคืนข้อความที่กำลังแสดงอยู่ในเครื่องมือเขียนสคริปต์ หากสคริปต์ไม่เปิดในเครื่องมือเขียนสคริ
พารามิเตอร์
ส่งค่ากลับ
GetScriptDocuments
กลับรายการของสคริปต์ที่เปิดอยู่ในขณะนี้ รวมถึงแถบคําสั่ง
ส่งค่ากลับ
ตัวอย่างโค้ด
--!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
ลงทะเบียนคืนหนึ่ง autocomplete คืน callbackFunction ที่มีชื่อว่า name ด้วยความสามารถในการกรอกอัตโนมัติ priority .
เมื่อเรียก Script Editor จะทำให้ autocomplete เรียกในลำดับความสามารถต่อไปด้วยคำขอและการตอบกลับของ autocomplete ตัวนี้ หลายคำตอบอาจแชร
callbackFunction พิมพ์: (Request: table, Response: table) -> table
ตาราง Request มีรูปแบบต่อไปนี้:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position คือตำแหน่งเลื่อนที่มีอินเด็กซ์เดียวที่คุณกําลังเสร็จสิ้น
- textDocument.document คือ ScriptDocument ที่เปิดอยู่ หากมันมีอยู่
- textDocument.script คือ LuaSourceContainer ที่คุณกําลังเสร็จสิ้นใน, ถ้ามันมีอยู่
หากมีทั้ง textDocument.document และ textDocument.script พวกเขาจะตรงกัน: req.textDocument.document:GetScript() == req.textDocument.script
ตารางตอบสนองมีรูปแบบต่อไปนี้:
type Response = {items: {{label: string, -- The labelkind: 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 } },}?}}}
- Response.items เป็นรายการของไอเท็มเสร็จสิ้น ลำดับของรายการนี้ไม่สำคัญ และจะปรากฏในเว็บเป็นรายการผู้ใช้
- Response.items[n].label คือเครื่องหมายการณ์ของรายการที่ปรากฏในเมนู autocomplete
- Response.items[n].kind ระบุว่าชนิดของการอัปโหลดอัตโนมัตินี้คืออะไร โดยปกตินี่จะควบคุมไอคอนที่ให้กับไอเทมในเครื่องมือเรียกแชมป์ ไม่ใช่ทุกชนิดมีไอคอนที่เป็นเอกลักษณ
- Response.items[n].tags ไอเท็มดูที่ Enum.CompletionItemTag สำหรับรายละเอียดเกี่ยวกับการใช้งานของพวกเขา
- Response.items[n].details ไอเท็มสำหรับรายการปกติ สตริงนี้เป็นการแทนที่สัญลักษณ์ของพวกเขา สำหรับรายการที่ว่า
- Response.items[n].documentation ระบุตัวองค์กายหลักของการเรียนรู้ในฟิลด์ value ของมัน documentation ปรากฏขึ้น แม้ว่าจะไม่มีรายละเอียดหรือความเหนือการโหลดก็ตาม ดังนั้นหน้าต
- Response.items[n].overloads ระบุจำนวนการโหลดเกินขีดจำกัดของการเสร็จสิ้นฟังก์ชันอัตโนมัติ
- Response.items[n].learnMoreLink ลิงค์ไปยังหน้าที่เกี่ยวข้องในคู่มือผู้สร้าง รหัสนี้ต้องเป็น https คำขอในการสร้าง roblox.com ไม่มีหน้าอื่นที่ปรากฏในเว็บเบราว์เซอร์
- Response.items[n].codeSample ไอเท็มdocumentation ต้องเป็นไปไม่เปล่าเพื่อแสดงรายการนี้
- Response.items[n].preselect หากเป็นเช่นนี้ ตัวแก้ไขจะเรียงลำดับรายการนี้ก่อนทุกรายการอื่นและเลือกมันสำหรับผู้ใช้โดยค่าเริ่มต้น ไม่มีผลกระทบถ้าเป็นปกติหรือหายไป
- Response.items[n].textEdit หากมี, การยอมรับการเสร็จสิ้นใช้การแก้ไขข้อความนี้ - แทนที่สปอนระหว่างตำแหน่งเริ่มต้นและสิ้นสุดด้วย nText ใหม่
หากคันเรียกกลับมาด้วยผลลัพธ์ที่ไม่ถูกต้องหรือพบข้อผิดพลาด เว็บไซต์จะล้างตารางการตอบกลับที่แก้ไขแล้วและใช้รายการผลลัพธ์อัตโนมัติที่เรียบร้อย
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!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
ลงทะเบียนการโอนความคิดเห็นของสคริปต์ callbackFunction ที่มีชื่อว่า name ด้วย priority เมื่อ Studio วิเคราะห์สคริปต์, คุณสมบัติทั้งหมดจะเรียกในลำดับเรื่องเรียงลำด
ตารางคำขอมีรูปแบบต่อไปนี้ โดย script เป็น LuaSourceContainer ที่จะได้รับการวิเคราะห์
type Request = {script: LuaSourceContainer?}
ตารางตอบกลับมีรูปแบบต่อไปนี้ โดย diagnostics คือค่าย่อของตารางวินิจฉัย แต่ละตารางวินิจฉัยมีรายการด้านล่าง
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 เป็นตัวแทนของช่วงข้อความที่ควรได้รับการเน้นเป็นสีข้อความ/ตัวละครเริ่มต้นเน้นเป็นสีข้อความ/ตัวละครหยุดเน้นเป็นสีข้อความ/ตัวละคร
- code เป็นชื่อแผงควบคุมสำหรับข้อความ
- message เป็นข้อควรประกาศเพื่อแสดงสำหรับสาย ข้อควรประกาศนี้จะปรากฏในเครื่องมือช่วยเหลือเมื่อผู้ใช้วางเมาส์ของพวกเขาบนสายใน Scroll Editor
- severity คือค่า Enum.Severity สำหรับผลการวินิจฉัย นี่จะกำหนดว่าผลการวินิจฉัยจะจัดประเภทในเครื่องมือการวิเคราะห์สคริปต์ใน Studio และวิธีการที่ข้อความถูกเน้นในเครื่องมือการวิเค
- codeDescription ลิงค์ไปยังหน้าที่เกี่ยวข้องในคู่มือผู้สร้าง รหัสนี้ต้องเป็น https คำขอสู่ create.roblox.com ไม่มีรหัสอื่นที่ปรากฏในเว็บไซต์เดียวกัน
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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
คำขอที่เครื่องมือเขียนสคริปต์เปิดสคริปต์ที่กำหนด กลับ (ใช่, ไม่มี) หากคำขอสำเร็จ กลับ (ปลอม, สตริง) หากคำขอล้มเหลวด้วยสตริงที่อธิบายปัญหา
หากสคริปต์เปิดอยู่แล้ว ฟังก์ชันนี้ประสบความสำเร็จและเปลี่ยนแท็บไปยังเครื่องมือเลือกที่เกี่ยวข้อง
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!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
กลับเวลาการแก้ไข Script.Source สำหรับสคริปที่ให้
ฟังก์ชันนี้ใช้คอนเทนต์เก่าของสคริปต์เพื่อคํานวณเนื้อหาใหม่ของสคริปต์
หากสคริปต์เปิดใน แหล่งที่มา จะส่งคำขอให้กับเครื่องมือการเขียนสคริปต์เพื่อปรับปรุงที่มาของมัน เครื่องมือการเขียนสคริปต์อ
คันเรียกอาจไม่สามารถให้ผลลัพธ์ได้ หากคันเรียกกลับมา nil คุณสามารถยกเลิกการดำเนินการได้ ฟังก์ชันนี้จะสร้างจนกว่าการดำเนินการจะยกเลิกหรือประสบความสำเร็จ
หากสคริปต์ไม่เปิดในเครื่องมือแก้ไข แหล่งที่มา
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
พารามิเตอร์
สคริปต์อินสแตนซ์ที่จะได้รับการปรับปรุง
หน้าต่างที่ให้คืนเนื้อหาสคริปต์ใหม่
ส่งค่ากลับ
อีเวนต์
TextDocumentDidChange
การเพิ่มเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพียมเพี
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string } ข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อความข้อควา
พารามิเตอร์
ตัวอย่างโค้ด
--!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
เพิ่มเพียงเพื่อให้เป็นเวลาที่สั้นที่สุดก่อนที่ ScriptDocument วัตถุจะถูกทำลายซึ่งเกิดขึ้นหลังจากที่เครื่องมือเรือสกรีนปิด หลังจากเห
พารามิเตอร์
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
เกิดขึ้นเพียงหลังจากที่วัตถุ ScriptDocument นี้ได้รับการสร้างและมีส่วนเกี่ยวข้องกับบริการซึ่งเป็นส่วนหลังของเครื่องมือเลขานุกรมเปิดตัว
พารามิเตอร์
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)