Script yetenekleri

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Script yetenekleri, DataModel alt ağacının içinde scriptlerin hangi işlemleri gerçekleştirebileceğini kontrol etmenizi sağlar. Varsayılan "her şey ya da hiçbiri" sisteminin yerine, bir scriptin sadece ses, fizik, veri depoları gibi belirli kategorilere erişebilmesi için ayarlama yapabilirsiniz.

  • Bu sistem, toolbox'tan alınan modellerin ne yapabileceğini sınırlamanıza olanak tanır ve kullanıcı tarafından üretilen içeriğin oyuna dahil edilmesini kolaylaştırır.
  • Ayrıca, kullanıcıların kendi kodlarını çalıştırmalarına izin veren oyunların daha iyi güvenliğini sağlamaya yardımcı olabilir; bu kod genellikle kısıtlı veya emüle edilmiş bir ortamda çalıştırılır.
  • Kendilerinin yapabileceklerini kısıtlayan kütüphaneleri paylaşmak için de kullanılabilir. Örneğin, ek matematik yöntemleri sunan bir kütüphane, diğer geliştiricilerin bu kütüphaneyi kullanırlarken tüm kod tabanını doğrulamak zorunda kalmamaları için ihtiyaç duyduğu en küçük yetenek seti ile kısıtlanabilir.

Script yeteneklerini etkinleştirme

Bu özelliği etkinleştirmek için, Explorer ve Properties penceresinde SandboxedInstanceMode özelliğini Default değerinden Experimental değerine değiştirin.

Sandbox'lanmış konteyner

Script yetenekleri, bir sandbox'lanmış konteyner kavramını tanıtır. Models, Folders, Scripts veya bu sınıflardan herhangi birinin alt sınıfları, Properties penceresinde mevcut olan Sandboxed özelliğine sahiptir.

Properties penceresindeki bir Klasörün Sandbox'lanmış özelliği.

Sandboxed özelliğini etkinleştirmek, örneği DataModel ağacında sandbox'lanmış bir konteyner olarak belirtir ve bu konteynerin içindeki scriptlerin gerçekleştirebileceği işlemleri Capabilities özelliğindeki değerler setine göre sınırlar.

Yetenekler

Capabilities özelliği, yürütmenin farklı yönlerini kontrol eden bir değer setidir. Yetenekler aşağıdaki geniş kategorilere ayrılır:

  • Yürütme kontrolü - Bir scriptin istemci veya sunucuda çalışıp çalışamayacağını belirtir.
  • Örnek erişim kontrolü - Bir scriptin hangi DataModel parçalarıyla etkileşimde bulunabileceğini belirtir.
  • Script işlevselliği kontrolü - Scriptlerin hangi Luau fonksiyonlarını çağırabileceğini belirtir.
  • Motor API erişim kontrolü - Roblox Motor API'sinin hangi bölümlerinin kullanılabileceğini belirtir.

Bir script, yetenekler setinde bulunmayan bir işlemi gerçekleştirmeye çalıştığında, Roblox bir hata bildirimi yapar. Hatalar genellikle denenen işlemi, bir eylemin hedefini ve eksik olan ilk yeteneği içerir:


Mevcut iş parçacığı 'Workspace' değişikliğini yapamaz (AccessOutsideWrite yeteneği eksik)
Mevcut iş parçacığı 'Clone' çağrısını yapamaz (CreateInstances yeteneği eksik)
Mevcut iş parçacığı 'GetSecret' çağrısını yapamaz (Network yeteneği eksik)

Yürütme kontrolü

Yürütme kontrolünü ele alan iki yetenek vardır:

Eğer script Enabled durumunda ise ancak, başladığı yerin konumuna karşılık gelen yetenek mevcut değilse, Output penceresinde bir uyarı mesajı görüntülenir. Eğer bir script o bağlamda çalışmamalıysa, devre dışı bırakın veya silin.

ModuleScripts ların, bu yürütme yeteneklerine sahip olması gerekmediğini unutmayın.

Bir script, yürütme kontrol yeteneği eksik olduğunda başlamayı başaramaz ve bu, çıktı olarak bir uyarı olarak raporlanır, örneğin:


Sunucu scripti 'Script' başlatılamıyor (RunServerScript yeteneği eksik)

Örnek erişim kontrolü

Bir tek yetenek, örnek erişim kontrolünü ele alır:

  • AccessOutsideWrite - Scriptin sandbox'lanmış konteyner dışından örnekler almasına ve almasına izin verilir.

Bu yetenek mevcut olmadığında, script yalnızca kendi sandbox'lanmış konteynerindeki örneklere bakabilir. Örneğin, script doğrudan sandbox'lanmış konteynerin içinde yer alıyorsa, script.Parent.Parent nil döndürür.

Ayrıca, herhangi bir Roblox API olayı, Instance geçerse, sandbox'lanmış konteynerin dışındaki herhangi bir Instance için nil döner. Örneğin, BasePart.Touched, sandbox'lanmış konteynerin dışındaki bir örnek tarafından tetiklendiğinde, olay yine alınır, ancak argüman nil olur.

Bu yeteneği ayarlamaktan kaçının; scriptlerin, oyundaki herhangi bir örnekle etkileşimde bulunma olasılığı olduğunda sandboxlama garantileri daha zayıftır.

Servislere erişim

AccessOutsideWrite olmadan bile, sandbox'lanmış konteynerdeki scriptler hala game, workspace ve servislere erişebilir. Bu erişim, scriptlerin bu global nesnelerin DataModel.GetService gibi yararlı yöntemlerini çağırabilmesi için sağlanmıştır, ancak çocuk örneklerine olan erişim hala doğrulanır.

Dahil edilen örnekler

Bir örnek, Roblox API'leri aracılığıyla geçmeyen bir fonksiyon çağrısı üzerinden geçiyorsa, referans korunur. Ancak, bir ModuleScript bu şekilde geçildiğinde, AccessOutsideWrite olmadan gereksinim duyulamaz. Bunun nedeni, ModuleScript'in dönüşünün genellikle değiştirilebilir olmasıdır ve sandbox'lanmış bir konteyner içindeki bir script tarafından değiştirilebilir.

Script işlevselliği kontrolü

Bu yetenek seti, scriptlerin bazı genel yönlerini kontrol eder:

Varsayılan fonksiyon kısıtlamalarının hala geçerli olduğunu unutmayın. LoadString etkin olsa bile, oyunun ServerScriptService içinde etkinleştirilmesi gerekir ve hala yalnızca sunucuda kullanılabilir.

Yeni örnekler oluşturmak için, CreateInstances'ın yanı sıra, o örneğe erişim sağlayan ek bir Motor API yeteneği gereklidir.

Motor API erişim kontrolü

Bu son yetenek grubu, scriptlerin çeşitli Motor API'lerine erişimini kontrol eder:

  • Animation - Animasyonlarla ilgili örneklere erişim
  • AssetCreateUpdate - Varlıkları oluşturma veya güncelleme ile ilgili Motor API'lerine erişim
  • AssetManagement - Okuma, oluşturma veya güncelleme dışındaki varlıklarla ilgili işlemler için Motor API'lerine erişim
  • AssetRead - Varlıklarla ilgili bilgi almak için Motor API'lerine erişim
  • Audio - Ses API'leri ile ilgili örneklere erişim
  • AvatarAppearance - Avatarların görsel unsurlarıyla ilgili örneklere erişim
  • AvatarBehavior - İnsan şekillerini kontrol etme veya değiştirme ile ilgili Motor API'lerine erişim
  • Basic - Az risk sunan genel API'lere erişim
  • CSG - Yapısal katı geometri (CSG) ile ilgili örneklere ve fonksiyonlara erişim
  • CapabilityControl - Örneklerin Sandboxed ve Capabilities özelliklerini değiştirme erişimi
  • Capture - Kullanıcının ekranında ekran görüntüleri veya videolar yakalamakla ilgili Motor API'lerine erişim
  • Chat - Oyun içi sohbetle ilgili örneklere erişim
  • Consequences - Kullanıcıları ceza verme (atmak veya yasaklamak) API'lerine erişim
  • DataStore - Veri deposu ve bellek deposu API'lerine erişim
  • DynamicGeneration - Varlıkları dinamik olarak değiştirme ile ilgili Motor API'lerine erişim
  • Environment - Ortamın nasıl görüntülendiği ile ilgili örneklere erişim
  • Groups - Gruplarla/topluluklarla ilgili Motor API'lerine erişim
  • Input - Kullanıcı girişi ile ilgili örneklere erişim
  • LegacySound - Geçersiz kılınacak seslerle ilgili Motor API'lerine erişim
  • LoadOwnedAsset - Size ait, size paylaşılan, Roblox'a ait veya masum varlık türlerinin yüklenmesi için Motor API'lerine erişim
  • Logging - Günlükler API'sine erişim
  • Material - Malzemelerle ilgili Motor API'lerine erişim
  • Monetization - Bir oyunu para kazanma ile ilgili Motor API'lerine erişim, çoğu PromptPurchases hariç
  • Network - HTTP ağ API'lerine erişim
  • Physics - Fizik ile ilgili örneklere erişim
  • PlatformAvatarEditing - Avatarları oluşturma veya güncelleme ile ilgili Motor API'lerine erişim veya bu konuda yardımcı olan API'ler
  • Players - Player sınıfıyla ilgili veya Players.LocalPlayer ile etkileşimde bulunan Motor API'lerine erişim
  • PromptExternalPurchase - Keyfi varlıkların satın alımını istemekle ilgili Motor API'lerine erişim
  • RemoteEvent - İç ağ iletişim işlemleri için örneklerin erişimi
  • SensitiveInput - Kullanıcıdan hassas girişi (yani yüksek gizliliğe sahip donanım sensörleri) yakalamakla ilgili Motor API'lerine erişim.
  • ServerCommunication - Sunucu arasında iletişim için Motor API'lerine erişim, örneğin MessagingService
  • Social - Sosyal özelliklerle (arkadaşlar ve davetler) ilgili Motor API'lerine erişim
  • Teleport - Teleportasyonla ilgili Motor API'lerine erişim
  • UI - Kullanıcı arayüzleri ile ilgili örneklere erişim

Her sınıfın, özelliğin, metodun ve olayın yetenekleri Motor API referansında gösterilmektedir. Örneğin, Player:GetFriendsOnlineAsync() Player ve Social yeteneklerini gerektirir.

Birçok HttpService metodu, scriptleri çalıştırma yeteneği dışında başka bir yeteneğe ihtiyaç duymadan kullanılabilir:

Bir örnek özelliğine veya metoduna, gerekli bir yetenek olmadan erişilmeye çalışıldığında, eksik yeteneği açıklayan bir hata rapor edilir.

Son olarak, yetenekler bugün Roblox Motorundaki her örneği kapsamaz. Bu bölümde veya aşağıdaki bölümde listelenmeyen örnekler, sandbox'lanmış bir konteynerden etkileşim için mevcut değildir ve mevcut script için Atanmamış yeteneğinin mevcut olmadığını belirten bir hata fırlatır.

Ek bir kısıtlama olarak, getfenv() ve setfenv() fonksiyonları sandbox'lanmış bir konteynerdeki scriptler için mevcut değildir. Bunları sandbox'lanmış bir scriptten çağırmak şunları bildirir:


Mevcut iş parçacığı ['getfenv'/'setfenv'] çağrısını yapamaz - hedef mevcut sandbox'ta mevcut olmayan API'leri kullanıyor

Sadece scriptlerin örneklere erişimi sınırlıdır. Örnekler hala kendileri içinde sandbox'lanmış bir konteynerde var olabilir ve çalışabilir. Işıklar hala yanıyor, kullanıcı arayüzleri hala görünür, ve önceden bağlanmış ses ayarları sesleri çalmaktadır.

Konteynerler arasındaki etkileşimler

İç içe geçmiş konteynerler

Bir sandbox'lanmış konteyner diğer birinin içinde iç içe geçmişse, içteki konteynerin örnekleri dıştaki konteynere erişilebilir.

İçteki konteynerin yetenekleri, dıştaki konteynerin yetenekleri ile sınırlıdır. Örneğin, dıştaki konteynerin Basic, Audio ve CSG yetenekleri varsa, içteki konteynerin Basic ve Network yetenekleri varsa, yalnızca Basic yetenekler içteki konteyner için çalışma zamanında mevcut olur.

Eğer içteki ve dıştaki konteynerler arasında ortak yetenek yoksa, ortaya çıkan yetenek seti boş olacaktır.

Bindable fonksiyonlar ve olaylar

BindableEvent ve BindableFunction, konteynerle iletişim kurmanın veya onun gerekli yetenekleri doğrudan kullanamadığı callback'leri çalıştırmasına izin vermenin en iyi yolunu sağlar.

Bir olay tetiklendiğinde veya bir fonksiyon çağrıldığında, bağlantılar onları kaydeden fonksiyonun bağlamında çalıştırılır. Bu, eğer olay veya fonksiyon callback'i sandbox'lanmış konteyner tarafından kaydedilmişse, o konteynerin yetenekleriyle çağrıldığı anlamına gelir. Eğer callback dışarıda bir kod tarafından kaydedilmişse, sandbox'lanmış konteyner scriptleri bunları tetiklediğinde, fonksiyonlarınızı sizin fonksiyonlarınızın erişimine uygun yeteneklerle çalıştırır.

AccessOutsideWrite yeteneği mevcut olsa bile, sandbox'lanmış konteynerlerdeki scriptlerin, kapasiteleri konteynerlerinden daha büyük olan dışındaki olayları veya fonksiyonları tetiklemesi mümkün değildir.

Bir sandbox'lanmış script, yetenek seti kendisinden daha büyük bir atalarının yeteneklerine sahip bir olayı veya fonksiyonu (BindableEvent, BindableFunction veya RemoteEvent) tetiklemeye çalıştığında, hata belirtilen mülkü incelemenize işaret eder.

Eğer hedef herhangi bir sandbox'lanmış konteynerin içinde değilse:


Mevcut iş parçacığı '<Hedef>' tetikleyemez çünkü '<Hedef>' 'Sandboxed' özelliği false olarak ayarlanmış ama çağıran iş parçacığı sandbox'lanmış

Bunu çözmek için, hedef için Sandboxed değerini true olarak ayarlayın. Alternatif olarak, çağıran iş parçacığının kaynağını Sandboxed değerinin false olarak ayarlandığı şekilde değiştirebilirsiniz, ancak bu önerilmez, çünkü sandboxlamanın sağladığı güvenlik avantajlarını ortadan kaldırır.

Eğer hedef sandbox'lanmışsa ama arayanın eksik olduğu yetenekler varsa:


Mevcut iş parçacığı '<Hedef>' tetikleyemez çünkü '<Hedef>' 'Capability' özelliği için daha fazla değerlere sahiptir: <İlk Eksik Yetenek> (ve N daha fazla)

Bunu çözmek için, hedefin Capabilities değerini arayanın bir alt kümesine daraltın veya arayanın Capabilities değerini hedefin değerleri ile eşleşecek şekilde genişletin.

Modül gereksinimi

İçteki ModuleScripts, sandbox'lanmış konteyner tarafından normal şekilde gereksinim duyulabilir. Ancak, hedef örnek konteynerin dışında olduğunda, ModuleScript yalnızca mevcut yetenek seti konteynerin sahip olduğu yetenekler ile daha küçük veya eşit olduğunda istenebilir.

Bu kısıtlama, RunClientScript ve RunServerScript yeteneklerine uygulanmaz. Eğer ModuleScript yalnızca RunClientScript in bulunduğu bir konteynerde yer alıyorsa ancak RunServerScript yeteneğine sahip bir scriptten gereksinim duyuluyorsa, başarılı olması ve sunucuda bu fonksiyonları çalıştırmasına izin verilir.

require() bir yetenek uyumsuzluğunda başarısız olduğunda, hata hedef modülü ve incelenmesi gereken özelliği isimlendirir, önceki bölümde tanımlanan Bindable fonksiyonlar ve olaylarla aynı şekilde.

Doğrudan çağrılan fonksiyonlar

Bir sandbox'lanmış konteynerdeki ModuleScript dışardan gereksinim duyulduğunda, bazı korumalar mevcut olmayacaktır. Özellikle, hedef fonksiyon çağrıyı yapanın erişebileceği tüm örneklere erişebilir. Eğer çağıran sandbox'lanmış bir konteynerde değilse, çağrı, sanki AccessOutsideWrite ona mevcutmuş gibi davranır.

Diğer yetenek kısıtlamaları hala geçerlidir. Eğer bir DataStore erişim yeteneğiniz varsa, ancak hedef modülün yoksa, DataStore yöntemlerini çağırması mümkün olmaz. Ancak, DataStore ile çalışacak kendi fonksiyonunuzu geçerseniz, hedef bunu o çağrı sırasında çalıştırabilir. Hedef, task gibi yöntemleri kullanarak bir iş parçacığı oluşturursa, bu iş parçacıkları o fonksiyonu çağırma yeteneğini kaybeder.

Örnekler, hedef modüle geçirilebilir veya modül alanlarına atanabilir.

Gerekirse, tablonun __index/__newindex metamethodlarını çalıştırmamak için rawset kullanarak tablo üyelerini atamanız önerilir.

Genel öneri, mümkün olan her durumda BindableEvent ve BindableFunction ile iletişim kurmaktır.

Örneklerin hareketi

Çoğu örneğin konteynerler arasında hareket sınırlaması yoktur. Ancak, Script örnekleri yalnızca aynı yetenek setine veya bu yeteneklerin bir alt kümesine sahip bir konteynere taşınabilir.

Bu, AccessOutsideWrite özelliğine sahip bir sandbox'lanmış konteynerin, kendisine daha fazla yetenek elde etmek üzere bir scripti dışarıda yeniden ebeveynleştiremeyeceği anlamına gelir.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.