ScriptDocument
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
ตัวอย่าง ScriptDocument เป็นโปรไฟล์ของเอกสารของ Studio Script Editor มันแตกต่างจาก LuaSourceContainer ที่เปิดในเอเดอร์ในที่มัน
เวิร์กเอ็ดที่มีตัวเองอยู่และเปลี่ยนแปลงในเส้นทางเส้นที่แตกต่างกันไม่ใช่ DataModel ใด ๆ ดังนั้
ความมีอยู่ของ ScriptDocument แสดงว่ามีเอกสารเปิดในเวรเอ๊กเซร์สคริปต์ ทุกตัวอย่างของ ScriptDocument มี ScriptEditorService เป็นพ่อของมัน แต่ละตัวอย่างปฏิบัติตามข้อกำหน
- ข้อความทั้งหมดใน ScriptDocument ถูกเข้ารหัสด้วย UTF-8
- ดัชนีทุกบรรทัดมี 1 ดัชนี
- ดัชนีตัวละครทั้งหมดจะมีอินเด็กซ์เป็น 1 และนับ UTF-8 บาท, ไม่ใช่แกรฟเม, ดังนั้นคำเตือนเดียวกันจาก TextBox.CursorPosition จะใช้: ตัวอักษร Unicode จำนวนมากกว่าหนึ่งบาท.
- ระยะทั้งหมดรวมถึงตำแหน่งเริ่มต้นและสิ้นสุดของพวกเขาดังนั้นการเริ่มต้น == สิ้นสุดจะหมายถึงระยะที่ว่างเปล่า
Class.ScriptDocument ทั้งหมด อยู่ในระดับความปลอดภัยของ เครื่องมือประยุกต์
สรุป
วิธีการ
กลับข้อความของบรรทัดที่กำหนด เมื่อไม่มีตัวอ้างให้ กลับข้อความของตำแหน่งเมาส์ปัจจุบัน
กลับจำนวนบรรทัดในเอกสาร
กลับไปที่ LuaSourceContainer อินสแตนซ์หรือ nil อย่างอื่น
ได้รับข้อความที่เลือกในแก้ไขเนอร์ หรือข้อความว่างเปล่าหากไม่มีการเลือก
กลับรายการเลือกครั้งล่าสุดของ Editor สคริปต์ในรูปแบบ: CursorLine, CursorChar, AnchorLine, AnchorChar หาก Editor ไม่มีรายการเลือกให้ CursorLine == AnchorLine และ CursorChar == AnchorChar .
รับตำแหน่งของตัวอักษรใหญ่และอันคู่ หากเวิร์ดเปลี่ยนแปลงไม่มีตัวเลือก พวกเขาจะเป็นค่าเดียวกัน
รับตำแหน่งของตัวอักษรที่เล็กกว่าและค่าดูดโดยตรง หากเว็บไซต์ไม่มีการเลือกพวกเขาจะเป็นค่าเดียวกัน
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
กลับข้อความจากเครื่องมือแก้ไขแบบเปิด
กลับเลขที่บรรทัดที่ปรากฏอยู่ในตอนนี้ในการเปลี่ยนแปลงของเรนเดอร์
กลับว่ามีหรือไม่มีข้อความใด ๆ ที่เลือกไว้ในแก้ไข
กลับ true หาก ScriptDocument เป็นตัวแทนของแถบคําสั่ง
คำขอที่เกี่ยวข้องกับเอกสารนี้ปิด ให้ผลตามที่เรียบร้อยจนกว่าเอดิเตอร์จะตอบกลับคำขอ
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
แทนที่ข้อความในขอบเขตที่กำหนดโดย ( startLine , startColumn ) ไปยัง ( endLine , 1> endColumn1> ) ด้วย newText
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
ขอให้เลือกเครื่องมือเลือกของเดียวกับค่าตัวอย่าง
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
ขอให้เลือกเครื่องมือเลือกของเดียวกับค่าตัวอย่าง
อีเวนต์
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
เกิดขึ้นเมื่อสคริปต์เอกสารเปลี่ยนแปลง, รวมทั้งทันทีหลังจากการเปลี่ยนแปลงข้อความ
เกิดขึ้นเมื่อเลขที่แสดงในแถบเลขในเครื่องมือเริ่มต้นเปลี่ยนแปลง
คุณสมบัติ
วิธีการ
GetLine
กลับข้อความของบรรทัดที่กำหนด เมื่อไม่มีตัวอ้างให้ กลับข้อความของตำแหน่งเมาส์ปัจจุบัน
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
GetLineCount
กลับจำนวนบรรทัดในเอกสารที่เปิดอยู่
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local lineCount = scriptDocument:GetLineCount()
print(`The script has {lineCount} lines!`)
else
print("No scripts open")
end
GetScript
กลับไปที่ LuaSourceContainer อินสแตนซ์หรือ nil อย่างอื่น
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local openScript = scriptDocument:GetScript()
print(`Currently open script: {openScript:GetFullName()}`)
else
print("No scripts open")
end
GetSelectedText
ได้รับข้อความที่เลือกในแก้ไขเนอร์ หรือข้อความว่างเปล่าหากไม่มีการเลือก
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
GetSelection
กลับรายการเลือกครั้งล่าสุดของ Editor สคริปต์ในรูปแบบ: CursorLine, CursorChar, AnchorLine, AnchorChar หาก Editor ไม่มีรายการเลือกให้ CursorLine == AnchorLine และ CursorChar == AnchorChar .
ส่งค่ากลับ
จุดเริ่มต้นของเครื่องมือ, จุดเริ่มต้นของเครื่องมือ, จุดเริ่มต้นของเครื่องมือ, จุดเริ่มต้นของเครื่องมือ.
GetSelectionEnd
รับตำแหน่งของตัวอักษรใหญ่และอันคู่ หากเวิร์ดเปลี่ยนแปลงไม่มีตัวเลือก พวกเขาจะเป็นค่าเดียวกัน
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetSelectionStart
รับตำแหน่งของตัวอักษรที่เล็กกว่าและค่าดูดโดยตรง หากเว็บไซต์ไม่มีการเลือกพวกเขาจะเป็นค่าเดียวกัน
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetText
กลับข้อความจากเว็บเบราว์เมอร์ ต้องใช้ตัวอักษร 0, 2 หรือ 4 ตัวอักษร:
- ถ้าเรียกด้วย 0 ตัวอักษร, รับเนื้อหาทั้งหมดของเวิร์ดเปเปอร์ที่เปิดกว้าง
- ถ้าเรียกด้วย 2 อาร์กุญแจ, รับข้อความของเอกสารเริ่มต้นที่ ( startLine , startColumn )
- ถ้าเรียกด้วย 4 อาร์กิวเมนต์, รับข้อความของเอกสารเริ่มต้นที่ ( startLine , startColumn ) และสิ้นสุดที่ ( endLine , 1> endColumn1> )
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local text = scriptDocument:GetText()
print(`Script contents: {text}`)
else
print("No scripts open")
end
GetViewport
กลับเลขเส้นที่ปัจจุบันที่แสดงในเมนูเปลี่ยนแปลง เมนูจะแสดงเส้นที่อยู่ระหว่างเริ่มต้นไลน์และสิ้นสุดไลน์ รวมทั้ง เส้นสุดของเส้นแรกและสุดอาจปรากฏบนหน้าจอ นอกจากนี้ กา
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local firstLine, lastLine = scriptDocument:GetViewport()
print(`Currently viewing lines {firstLine} to {lastLine}`)
else
print("No scripts open")
end
HasSelectedText
กลับว่ามีหรือไม่มีข้อความใด ๆ ที่เลือกไว้ในแก้ไข
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
IsCommandBar
กลับ true หาก ScriptDocument เป็นตัวแทนของแถบคําสั่ง แถบคําสั่งมีกฎและข้อจํากัดพิเศษใน API นี้:
- Studio สร้างแถบคําสั่งก่อนที่จะเรียกใช้ปลั๊กอินดังนั้นจึงไม่ได้เรียกเหตุการณ์ที่เปิดอยู่เสมอ แม้ว่ามันจะปิดและเปิดใหม่เมื่อ Studio เปลี่ยนจาก DataModels ไปยัง
- คุณไม่สามารถแก้ไขแถบคําสั่งด้วย EditTextAsync เพื่อเหตุผลด้านความปลอดภัย
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if document:IsCommandBar() then
print("Command bar document:", document)
end
end
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
EditTextAsync
แทนที่ข้อความในขอบเขตที่กำหนดโดย ( startLine , startColumn ) ไปยัง ( <
หากคุณสมบัติตัวเรียบร้อย, มันจะกลับมา ( true , nil )
ฟังก์ชันจะทิ้งข้อผิดพลาดหาก:
- ระยะไม่ถูกต้อง
- ระยะนี้จะตัดตัวอักษรยูนิโคด เช่น เฉพาะส่วนของบาทหลวงของตัวอักษรยูนิโคดเท่านั้น
- newText ตัวเอง มี UTF-8 ที่ไม่ถูกต้อง
หากฟังก์ชันล้มเหลวก็จะกลับมา ( false, string). ตัวสตริงเป็นคำอธิบายปัญหา ประเภทการล้มเหลวที่พบบ่อยที่สุดคือการจับคู่เวอร์ชัน เกิดขึ้นเมื่อคุณพยายามที่จะ
พารามิเตอร์
ส่งค่ากลับ
ForceSetSelectionAsync
ขอให้เลือกเลือกผู้เขียนของเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือกเลือ
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:ForceSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
RequestSetSelectionAsync
ขอให้เวิร์ดเพลตตั้งค่าการเลือกตัวเลือกของเวิร์ดเพลตให้เป็นค่าตัวอักษรตามที่ระบุไว้ สองตัวอักษรต้องเป็นตัวอักษรที่ตรงกัน
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:RequestSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
อีเวนต์
SelectionChanged
เกิดขึ้นเมื่อสคริปต์เอกสารเปลี่ยนแปลง, รวมทั้งทันทีหลังจากการเปลี่ยนแปลงข้อความ
พารามิเตอร์
ตัวอย่างโค้ด
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
ViewportChanged
เกิดขึ้นเมื่อเลขเส้นที่ปรากฏในตัวแก้ไขเปลี่ยนแปลง ดู ScriptDocument.GetViewport สำหรับรายละเอียด
พารามิเตอร์
ตัวอย่างโค้ด
--!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)