Roblox'un varsayılan `Backpack` ve `Tool` sistemine güvenmek karakter fizikleri üzerinde dengesizliklere ve eşya kopyalama (dupe) açıklarına yol açar.
Profesyonel yapımlar tamamen veri odaklı envanterler kullanır. Eşyaları Luau tablolarında saklayıp ikili `buffer` ile paketleyerek gecikmesiz ve güvenli sistemler kurabilirsiniz.
1. Araçlardan Veriye: Özel Envanter Mimarisi
Profesyonel projelerin neden varsayılan Tool nesnelerini terk ettiği:
- Fizik Yükü: Standart Tool nesneleri karakterin içine fiziksel parçalar ekleyerek takılmalara neden olur.
- Saf Veri Yapısı: Bir eşya sadece bir veri satırıdır: `{ itemId: number, quantity: number, durability: number }`.
- Ağ İzolasyonu: Veriler sunucuda güvenle saklanır ve sıkıştırılmış RemoteEvent ile istemciye yansıtılır.
- Sunucu Otoritesi: Eşya taşıma ve atma işlemleri tamamen sunucu tarafından doğrulanır.
2. Buffer Bit Paketleme ve Ağ Serileştirme
40 yuvalık bir envanteri birkaç yüz baytlık ikili pakete dönüştürme:
- Luau Buffer Fonksiyonları: `buffer.create` ve `buffer.writeu16` ile her yuva sadece 4 bayt yer kaplar.
- İkili Düzen: 2 bayt ItemID, 1 bayt adet ve 1 bayt dayanıklılık oranı.
- Bant Genişliği Tasarrufu: 1.2 KB yerine sadece 160 bayt (%87 ağ tasarrufu).
- Delta Senkronizasyon: Oyun sırasında sadece değişen yuvaların numaralarını gönderin.
--!strict
-- Luau Buffer Envanter Motoru
local InventoryService = {}
local playerInventories = {}
3. Hotbar Yönetimi ve Motor6D ile Silah Bağlama
3D silah modellerini karakter fiziğini bozmadan ele yerleştirme:
- İhtiyaç Anında Oluşturma: 3D model sadece oyuncu ilgili tuşa bastığında ReplicatedStorage üzerinden kopyalanır.
- Motor6D Bağlantısı: Klasik Weld yerine Motor6D kullanmak silah vuruş animasyonlarının vücutla doğal uyumunu sağlar.
- Hızlı Değişim Koruması: 0.2 saniyelik bekleme süresi tuşlara art arda basıldığında animasyonun bozulmasını engeller.
- İstemci Önceden Tahmini: Arayüz anında değişirken sunucu arka planda bekleme sürelerini onaylar.
4. Eşya Klonlamayı Önleyen Mutex Kilitleri
Çok oyunculu oyunlarda eşya kopyalama açıklarını kökünden temizleme:
- Yarış Durumu (Race Condition): Eşyayı aynı anda hem sandığa koyup hem yere atma girişimleri.
- Sunucu Tarafı Mutex: Her envanterde eşzamanlı işlemleri engelleyen bir `isLocked` anahtarı bulundurun.
- İki Aşamalı Takas Güvencesi: Takas sırasında iki tarafın envanterini de kilitleyin.
- Güvenli Yere Atma: Eşyayı dünyada oluşturmadan ÖNCE envanter verisinden silin.
5. Mobil Dokunmatik Deneyim ve Kontrol Listesi
Telefon ve tabletlerde sorunsuz çalışan envanter kuralları:
- Geniş Dokunma Alanı: Mobil ekranlardaki hotbar yuvaları en az 48x48 punto olmalıdır.
- İki Aşamalı Seçim: Mobilde parmakla sürüklemek yerine önce kaynağa sonra hedefe dokunma sistemini sunun.
- Arayüz Havuzlama: Ekran öğelerini önceden oluşturup açılışta sadece simgeleri değiştirin.
- MicroProfiler Takibi: Envanter açılış süresi mobil cihazlarda 1.5 ms altında kalmalıdır.
Frequently Asked Questions
Roblox'un varsayılan Tool sistemini neden kullanmamalıyız?
Karaktere fiziksel parçalar ekleyerek hareket lagı oluşturduğu ve eşya kopyalama hilelerine açık olduğu için.
Buffer serileştirme internet kullanımını ne kadar azaltır?
JSON formatına göre %80 ila %90 tasarruf sağlar; 40 yuva sadece 160 baytta iletilir.
Eşya kopyalama açıkları kodla nasıl kesin olarak engellenir?
Sunucuda `isLocked` mutex kilidi kullanarak ve eşyayı yere bırakmadan önce envanterden silerek.
Silah modeli karaktere nasıl bağlanmalıdır?
Animasyonların doğal oynatılabilmesi için ele Motor6D mafsalı ile kaynaklanmalıdır.