Script Capilities, DataModel alt ağacındaki eylemleri kontrol etme yeteneği sağlayan bir sistemdir. Daha deneyimli kontrolü deneyimli kullanıcıların herhangi bir başka kullanıcıyı yapabileceği her şeyi yapabilmesi için deneyimli kullanıcıların içine sağlar.
- Bu sistem, alınan modellerin kutu iletişim kutusundan yapabileceği şeyleri sınırlayabilmenizi ve kullanıcı oluşturulmuş içerikleri deneyim içine dahil etmenizi sağlar, bunlar arada sıra bağlantı kurmak.
- Ayrıca, oyuncuların kendi kodlarını çalıştırabilen deneyimlerin daha iyi güvenliğinden emin olmak için de yardımcı olabilir, bu genellikle sınırlı veya emüle edilmiş bir çevreyürütülür.
- Ayrıca, kendilerine ne yapabileceklerine sınırlayan kütüphaneleri paylaşmak için de kullanılabilir. Örneğin, ek matematik yöntemleri sağlayan bir kütüphane, diğer kullanıcıların kod tabanını doğrulamak zorunda kalmadan onu kullanabilir, böylece onun kötü niyetli kod içermediğinden emin olabilir.
Kullanıcı İşlevlerini Etkinleştirme
Bu özelliketkinleştirmek için, SandboxedInstanceMode ayarını Default 'dan Experimental 'e değiştirin Explorer'da.
Klient beta testi tamamlandığında bu adım artık gerekmez.
Sandboxed Konteynır
Bu sistem bir sandboxed container konseptini tanıtır. Bir Model instansı, Folder , 2>Class.Script2> veya bu klaslardan soyundan herhangi bir 5>Class.Instance.Sandboxed|Sandboxed</
Class.Instance.Sandboxed|Sandboxed özelliğinin tasarımı, DataModel ağacının içindeki bir sandboxed kapsayıcı olarak instansı belirtir, bu da kullanıcıların bu kapsayıcı içindeki kodların seti hakkındaki eylemlerini sınırlar.
Yetenekler
Capabilities özelliği, işlemenin farklı yönlerini kontrol eden bir dizi değerdir, dört gruba ayrılmıştır:
- Kullanıcı kontrolü - Bir skriptin kullanıcıda veya sunucuda çalıştırılabilirliğini belirtir
- İstemci erişim kontrolü - Bir senaryonun etkileşimine izin verdiği DataModel parçalarını belirtir
- Kullanıcı işlevleri kontrolü - Luau'nun hangi işlevleri çağıracağını belirtir
- Motor API erişim kontrolü - Roblox Motoru API'sinin hangi bölümlerinin kullanılabileceğini belirtir
Bir senaryo, mevcut yürütme devletinde yer almayan bir eylemi yerine getirmeye çalıştığında bir hata rapor edilir. Hatalar genellikle denemekte olan eylemi, hedef bir aksiyonve ilk yeteneği içerir, örneğin:
The current thread cannot modify 'Workspace' (lacking capability AccessOutsideWrite)The current thread cannot call 'Clone' (lacking capability CreateInstances)The current thread cannot call 'GetSecret' (lacking capability Network)
Kontrolü Tamamla
Bu set iki yetenek içerir:
- RunClientScript - LocalScript veya Script ile bir 0> Class.BaseScript.RunContext|RunContext0> değeri ile istemci üzerinde çalıştırılabilir
Eğer Enabled ise, yerleştirmeye çalıştığı yerleşik kapasite Çıkış penceresinde görüntülenir. Eğer bir yerleştirme yerleştirilmeye çalıştığı yerleşik kapasiteyi etkinleştirmezse, yapıyı etkinleştirmez veya silir.
Bunların ModuleScripts gerektirme yeteneklerine sahip olması gerekmediğini lütfen unutun.
Bir senaryo başlatılamadığında çalıştırma kontrolü yeteneği eksik olduğu için uyarı olarak çıktıda bildirilir, örneğin:
Cannot start server script 'Script' (lacking capability RunServerScript)
İstemci Erişim Kontrolü
Bu set sadece tek bir yeteneği içerir:
- AccessOutsideWrite - Kod, sandboxed kutudan dışarıda bulunan instansları alıp alabilir
Yetenek mevcut değilse, kullanıcının kendi sandbox'u içinde bulunan yalnızca kullanıcının içine koyduğu yazılımları arayabilir. Örneğin, kullanıcının kendi sandbox'u içine doğrudan yerleştirildiğinde, script.Parent.Parent``nil 返回。
Ayrıca, Instance içindeki herhangi bir Roblox API etkinliği, nil için herhangi bir Instance dışındaki herhangi bir etkinliği geçerlidir. Örneğin, 2> Class.BasePart.Touched2>
Bu yeteneği ayarlamayın; özelleştirme garantileri, kodların bir deneyimde herhangi bir istanza ile etkileşime girme yeteneği olduğunda daha zayıf.
Hizmetlere Erişim
AccessOutsideWrite olmadan bile, sandbox'daki kaynaklar hala game , workspace ve hizmetlere erişebilir. Bu erişim, kaynakların global yöntemlerini çağırabilir, gibi 1> Class.DataModel.GetService1>, ancak onların çocuk istemeleri hala doğrulanır.
İçinde Geçen İн스턴سlar
Bir örneği Roblox API'lerinden geçmeyen bir işlev çağrısı aracılığıyla geçirirseniz, referans korunur. Ancak, bir ModuleScript şu şekilde geçirilirse, AccessOutsideWrite olmadan gerektirilemez. Çünkü ModuleScript ı
Kod İşlevi Kontrolü
Bu set yetenekleri, genel yazılımların bazı yönlerini kontrol eder:
- Varlık Gereksinimleri - Kullanıcının bir varlık kimliği ile require çağırma izni
- LoadString - Skript loadstring çağırabilir
- CreateInstances - Skript, Instance.new , Instance.fromExisting veya 0> Class.Instance:Clone0> kullanarak yeni istanbulabilir
Varsayılan işlev sınırlarının hala geçerli olduğunu unutmayın. LoadString etkinleştirilmiş olsa bile deneyimin ServerScriptService içinde etkinleştirilmesi gerekir ve sadece sunucuda mevcut.
Yeni istanlar oluşturmak için, CreateInstances ile birlikte, o istanese erişim sağlayan ek bir Motor API kapasitesi gerekir.
Motor API Erişim Kontrolü
Bu son grup yeteneklerin erişimini çeşitli Motor API'lerine kontrol eder:
- Temel - Basit istemcilere ve temel yapı bloğuna erişim
- Ses - Ses API'leriyle ilgili instanslara erişim
- Veri Deposu - Veri depolarına ve hafıza depolarına API'ye erişim
- Ağ - HTTP ağı API'lerine erişim
- Fizikler - Fiziklerle ilgili instanslara erişim
- Kullanıcı Arayüzü - Kullanıcı Arayüzüne ilişkin instanslara erişim
- CSG : yapısal olmayan geometri ile ilgili instans ve işlevlere erişim (CSG)
- Sohbet : deneyim içi sohbete ilişkin instanslara erişim
- Animasyon : Animasyonlarla ilgili instanslara erişim
- Avatar : avatarlarla ilgili instanslara erişim
- Giriş : kullanıcının girişine ilişkin instanslara erişim
- Ortam : ortamın nasıl görüntülenmesiyle ilgili olan instanslara erişim
- Uzaktan Etkinlik olayı : iç ağ işlemleri için istemcilere erişim
Ayrıca, HttpService istanstalar da vardır. Bunlar, Class.HttpService metodlarını içerir:
Bir nesne özelliği veya metodu gereken bir yeteneği olmadan erişilirse, kayıp yeteneği açıklayan bir hata rapor edilir.
Son olarak, Roblox motorunda her instansın bugün listelenmediğini unutmayın. Bu bölümde listelenmeyen instanslar veya aşağıdaki bölümde listelenen birkaç instans için etkileşim mevcut değildir ve aşağıdaki gibi bir hata oluşturur: Unassigned bir yetenek mevcut değildir.
Ekstra bir sınırlandırma, getfenv ve setfenv işlevlerinin sandbox kapsüllerindeki kodlar için mevcut olmadığıdır.
Sadece kullanıcıların istemelerine erişimi sınırlıdır. İstemelerin kendileri hala mevcut olabilir ve kendi içinde bir sandbox içinde çalışmaya devam eder. Işıklar hala parlar ve kullanıcı arayüzleri hala görünür ve ses ayarları kendi içinde kablolanmış oynatır sesleri.
Motor API Kapsayıcı Görevler
Her Motor API yeteneğinden farklı olarak (instans kapasitesinden bağımsız olarak) her için bir istem veya yöntem listesi vardır:
Temel * Attachment
- Class.Part , MeshPart , CornerWedgePart , 0> Class.TriangleMeshPart0> , 3> Class.TrussPart3> , Part6>
Veri Deposu * DataStore , OrderedDataStore , GlobalDataStore
- Class.DataStoreGetOptions , DataStoreIncrementOptions , DataStoreInfo , 0> Class.DataStoreKey0> , 3> Class.DataStoreKeyInfo3> , DataStoreGetOptions6>
Ağlar * Class.HttpService:GetAsync , HttpService:RequestAsync() , HttpService:PostAsync() , 0> Class.HttpService:UrlEncode0> , HttpService:GetAsync()3>
Fizikler * AlignOrientation , AlignPosition , DynamicRotate
Kullanıcı Arayüzü * Class.BasePlayerGui , PlayerGui , BillboardGui , 0> Class.GuiBase0> ,
- Class.Toolbar , TextButton , TextFilterResult , 0> Class.TextFilterTranslatedResult0> , 3> Class.TextLabel3> , 6> Class.TextService6> , TextBox9>
- <
CSG * GeometryService
- BasePart yöntemleri: BasePart:IntersectAsync() , BasePart:SubtractAsync() , 0> Class.BasePart:UnionAsync0>
- Class.IntersectOperation (ayrıca Temel gerektirir), NegateOperation (ayrıca 0> Temel0> gerektirir), 3> Class.PartOperation3> (ayrıca 6> Temel6> gerektirir), IntersectOperation9> (ayr
Sohbet * BubbleChatConfiguration , BubbleChatMessageProperties
- Class.TextChannel , TextChatCommand , TextChatConfigurations , 0> Class.TextChatMessage0> , 3> Class.TextChatMessageProperties3> , 6> Class.TextChatService6> , TextChannel9>
Animasyon * Bone (ayrıca Temel gerektirir)
- Class.Animation , AnimationClip , AnimationClipProvider , 0> Class.AnimationContainer0> , Animation3>
Avatar * Accessory , AccessoryDescription
Ortam * Atmosphere , Clouds , Lighting , 0> Class.Sky0>
- Class.BloomEffect , BlurEffect , ColorCorrectionEffect , 0> Class.ColorGradingEffect0> , 3> Class.DepthOfFieldEffect3> , 6> Class.PostEffect6> , BloomEffect9>
Uzaktan Etkinlik * BaseRemoteEvent , RemoteEvent , UnreliableRemoteEvent
Kontenler Arasındaki Etkileşim
Geriyeşilmiş Konteynerler
Bir sandbox'daki bir konsolos konsolosu diğerine katlanır ve konsolosun içindeki instanslar dışarıdaki konsola erişir.
İç kutunun yetenekleri dış kutunun yetenekleriyle sınırlıdır. Örneğin, dış kutunun Temel , Ses ve CSG yeteneklerine sahip olup iç kutunun 2>Temel2> ve 5>Ağ5> yeteneklerine sahip olması durumunda,
İçeride ve dışındaki kontenler arasında ortak kullanılabilirliği yoksa, sonuçlanan kapasite seti boştur.
Etkileşimli Fonksiyonlar ve Etkinlikler
BindableEvent ve BindableFunction kullanıcılarla iletişim kurmanın en iyi yolunu sağlar veya onun kendisi kullanılamayan yeteneklerle çağrılarınızı etkinleştirmenizi sağlar.
Bir etkinlik veya bir işlev başlatıldığında, bağlantılar kaydedilen işlevin konteynında yürütülür. Bu, etkinliği veya işlevi kaydeden konsoloskabı tarafından kaydedildiğinde, bağlantılar konsoloskabı tarafından yürütülür. Eğer işlev veya konsoloskabı dışındaki kod tarafından kaydedildiyse, bağlantı
Ayrıca, AccessOutsideWrite kapasitesine sahip olsalar bile, kutuplaştırılmış kapsayıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kutuplaştırıcı kut
Modül Gerektirir
Inner ModuleScripts Sandboxed kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıc
Bu sınırlama RunClientScript ve RunServerScript yeteneklerine uygulanmaz. ModuleScript , sadece 1> RunClientScript1> ile bir konteynere yerleştirilmiş olsa bile, 4> RunServerScript4> yeteneklerine başarıyla erişebilir ve bu işlevleri sunucuda başar
Doğrudan Çağrılan Fonksiyonlar
Bir ç ModuleScript içine bir kutu dışarıdan gerekirse, bazı korumalar mevcut değildir. Özellikle, Arayüz fonksiyonu Arayüz'e erişebilir. Ayrıca, Arayüz dışında yazılım yükleyin mevcut değilse, çağrı 1> AccessOutsideWrite1>
Diğer kapasite sınırları hala geçerlidir. Eğer hedef modülü Veri Deposu erişim yeteneğine sahipse, ancak hedef modülü DataStoresa, DataStore metodlarını çağıramaz. Ancak, kendi işlevinizi <
İン스턴slar hedef modülüne veya modül alanlarına atanabilir.
Gerekirse, rawset kullanarak masa üyelerine atanması önerilir, böylece masada belirlenmiş metodların __index / __newindex üzerindeki metodlarının çalışmasını önleyebilirsiniz.
Genel tavsiye, mümkün olduğunda BindableEvent ve BindableFunction ile iletişim kurmaktır.
İн스ансların Hareketi
Çoğu durumda kontenedörler arasındaki hareket sınırları yoktur. Ancak, script örnekleri sadece aynı seti sahip olan bir konağa veya bu kabullerin altında bulunan bir konağa taşınabilir.
Bu, AccessOutsideWrite ile etkili bir kutu oluşturucu içinde bir kutu dışarı yazabilir ve daha fazla yetenek elde eder.