ScriptDocument
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Bir ScriptDocument örneği, bir Studio Kod Dizini'nin dokümanının bir projesidir. Onun LuaSourceContainer ile açıldığı editordeki açık bir belgeyi temsil ediyor ve onun temsili bir
Script Editor'ın kendisi mevcut ve herhangi bir DataModel , farklı bir subüsteğinde değiştirilmiş, bu yüzden ScriptDocument kopyaları açık Script Editor'ı yeniden oluşturur, ancak a
Bir ScriptDocument varlığı, bir belgenin Script Editor'da açıldığını gösterir. Tüm ScriptDocument instanslarının ebeveyni ScriptEditorService dir. Her instans, aşağıdaki kodlama kurallarına uyar:
- Class.ScriptDocument içindeki tüm metin UTF-8 kodlanmıştır.
- Tüm satır indeksleri 1-indexedir.
- Tüm karakter indeksleri 1-indexed ve UTF-8 byteleri sayılır, not графическимler, bu yüzden aynı uyarı TextBox.CursorPosition 'dan geçerlidir: birçok Unicode karakter bir byteden fazlasını alır.
- Tüm menzillerin başlangıç pozisyonu ve son pozisyonu dahil olmak üzere, start == end, boş bir menzil olmasını sağlar.
Tüm ScriptDocument API'leri Eklentide güvenlik seviyesindedir.
Özet
Özellikler
Yöntemler
Belirli satırın metnini iade eder. Bir argüman sağlanmadığında, mevcut kurumsal pozisyonun satırını iade eder.
Dokümdeki satır sayısını iade eder.
Eğer mevcutsa, LuaSourceContainer alt yanını döndürür, durumtakdirde nil .
Seçim yoksa, metni editördeki seçili alanın içeriğini alır veya boş bir yazı ifadesi alır.
Script Editor'ın son seçimini biçimde iade eder: CursorLine, CursorChar, AnchorLine, AnchorChar. Eğer Script Editor'ın seçimi yoksa, CursorLine == AnchorLine ve CursorChar == AnchorChar .
Kurşör pozisyonunun ve anka kısmının daha büyüğünü alır. Eğer editorin seçeneği yoksa, aynı değerlerdir.
Kurşör pozisyonunun ve bağlantının daha küçüğünü alır. Eğer editorin seçeneği yoksa, aynı değerlerdir.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Açık editordan döndürür text.
Editor değişikliğinde görüntülenen hattın numaralarını iade eder.
Editörün herhangi bir metni seçip seçmediğini döndürür.
Komut çubuğunu temsil eden ScriptDocument gerçekten döndürür.
Dokümanla ilgili olan istekliler kapatılır. Yazılımın isteğe cevap verene kadar mevcut aşkını verir.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Yazıyı belirlenen menzilden ( startLine , startColumn ) ile ( endLine , 1> endColumn1> ) yeni yazı ile değiştirir.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Editörün kuruluş seçimini argüman değerlerine ayarlanmasını ister.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Editörün kuruluş seçimini argüman değerlerine ayarlanmasını ister.
Etkinlikler
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
ScriptDocument'ın değişmesi durumunda, tüm metin değişikliklerinden hemen sonra yanar.
Editörde görüntülenen satır numaraları değiştirildiğinde ateş eder.
Özellikler
Yöntemler
GetLine
Belirli satırın metnini iade eder. Bir argüman sağlanmadığında, mevcut kurumsal pozisyonun satırını iade eder.
Parametreler
Dönüşler
Kod Örnekleri
--!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
Aktif belgedeki satır sayısını iade eder.
Dönüşler
Kod Örnekleri
--!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
Eğer mevcutsa, LuaSourceContainer alt yanını döndürür, durumtakdirde nil .
Dönüşler
Kod Örnekleri
--!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
Seçim yoksa, metni editördeki seçili alanın içeriğini alır veya boş bir yazı ifadesi alır.
Dönüşler
Kod Örnekleri
--!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
Script Editor'ın son seçimini biçimde iade eder: CursorLine, CursorChar, AnchorLine, AnchorChar. Eğer Script Editor'ın seçimi yoksa, CursorLine == AnchorLine ve CursorChar == AnchorChar .
Dönüşler
CursorLine, CursorChar, AnchorLine, AnchorChar.
GetSelectionEnd
Kurşör pozisyonunun ve anka kısmının daha büyüğünü alır. Eğer editorin seçeneği yoksa, aynı değerlerdir.
Dönüşler
Kod Örnekleri
--!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
Kurşör pozisyonunun ve bağlantının daha küçüğünü alır. Eğer editorin seçeneği yoksa, aynı değerlerdir.
Dönüşler
Kod Örnekleri
--!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
Açık editordan metin döndürür. 0, 2 veya 4 arguyla çağrılmalıdır:
- 0 arguyla çağrılırsa, açık editorin içeriğini alır.
- 2 argümanla çağrılırsa, belge başlangıcındaki metni alır ( startLine , startColumn ).
- 4 argümanla çağrılırsa, belgesin başlangıcındaki metni alır ( startLine , startColumn ) ve bitişindeki metni alır ( endLine , 1> endColumn1> ).
Parametreler
Dönüşler
Kod Örnekleri
--!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
Düzenleyici değişikliğinde görüntülenen satır numaralarını içerir. Düzenleyici, başlangıç çizgisi ve son çizgisi arasındaki satır numaralarını gösterir, dahil. İlk ve son satır sadece parçalanabilir gösterilir. Örneğin, sadece son satırın üst kısmı ekranda görüntülenebilir. Ayrıca, kod katlanması kayıtlarını başlangı
Dönüşler
Kod Örnekleri
--!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
Editörün herhangi bir metni seçip seçmediğini döndürür.
Dönüşler
Kod Örnekleri
--!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
Class.ScriptDocument Komut Barını temsil ediyorsa geri döndürür. Komut Barında bu API'de özel kurallar ve sınırlamalar vardır:
- Studio, eklentileri çalıştırmadan önce Komut Kutusu oluşturur, bu yüzden Studio, DataModels arasındaki geçişler sırasında kapatılır ve yeniden açılır.
- Güvenlik nedeniyle EditTextAsync ile Komut çubuğunu düzenleyemezsiniz.
Dönüşler
Kod Örnekleri
--!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
Düzenleyici bu belgeyle ilgili istekleri kapatır. İstek yanıtlanana kadar mevcut olan çekirdeği kapatır. Eğer işlev başarılıysa, (doğru, boş) olarak geri döndürür. Eğer işlev başarısızysa, (yanlış, dizi) olarak hata açıklaması için döndürür.
Bu işlev, komut çubuğunu kapatmaz.
Dönüşler
Kod Örnekleri
--!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
Yazıyı belirli menzilden ( startLine , startColumn ) ile ( endLine , 1> endColumn1> ) ar
Eğer işlev başarılıysa, şu şekilde döndüğüne göre ( true , nil ).
Eğer işlev bir hata oluşturur:
- Menzil geçersiz.
- Menzil, bir Unicode karakterini dilimleyecekti, örneğin sadece bir Unicode karakterinin bazı bytelerini değiştir.
- newText kendisi geçersiz UTF-8 içerir.
Eğer işlev başarısız olursa, bir (false, dizi) döndürür. Bu, bir versiyon uyumsuzlığıdır. En yaygın hata türü, bir versiyon uyumsuzlığıdır. Bu, ScriptDocument ile içerikleriniz arasında bir uyumsuzlık olduğunda deneyin editiyor. Bu durumda, edit'i
Parametreler
Dönüşler
ForceSetSelectionAsync
Editörün cursor seçimini argüman değerlerine ayarlamasını ister. Bu, bağlantı argümanları her ikisi de değer olmalıdır, ya da hiçbiri. Eğer hiçbiri değer değilse, kurucu argümanı olmalıdır. Editor, met
Parametreler
Dönüşler
Kod Örnekleri
--!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
Editörün cursor seçimini argüman değerlerine ayarlamasını ister. Bu ikisi de bağlantı argümanları olmalıdır veya hiçbiri. Eğer hiçbiri bağlantı argümanı olmazsa, kuralların aksine olur. Editor, metin belgesinin değiştirildiğinde veya cursor hareket ettirildiğinde kuralların a
Parametreler
Dönüşler
Kod Örnekleri
--!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
Etkinlikler
SelectionChanged
ScriptDocument'ın değişmesi durumunda, tüm metin değişikliklerinden hemen sonra yanar.
Parametreler
Kod Örnekleri
--!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
Düzenleyicinde görüntülenen satır numaraları değiştirdiğinde ateşlenir. Ayrıntılar için ScriptDocument.GetViewport bakın.
Parametreler
Kod Örnekleri
--!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)