- #1
Konu Sahibi
: serkankacan
[REHBER & QUERY] vSRO Karakter Envanter Boyutunu (3 Sayfa Çanta) Açma Query'si
_Char Tablosu ve _Inventory Satırlarını Eksiksiz 108 Slota (Full Sayfa) Senkronize Etme
_Char Tablosu ve _Inventory Satırlarını Eksiksiz 108 Slota (Full Sayfa) Senkronize Etme
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında oyuncuların veya test karakterlerinin 32'lik envanter genişletme görevleriyle (Inventory Expansion Quest) uğraşmadan, çantalarındaki **3 sayfanın tamamını (Maksimum Kapasite)** doğrudan açabilmesi için bu SQL sorgusunu kullanabilirsiniz.
Kritik Mimari Uyarısı' Alıntı:DİKKAT (108 Slot Sınırı & Satır Bütünlüğü):
- Eski paylaşımlardaki
InventorySize = 109değeri yanlıştır. Silkroad mimarisinde slotlar 0'dan 108'e kadar uzanır. Stabil ve hatasız çalışan tam kapasite değeri 108'dir.- Sadece `_Char.InventorySize` sütununu güncellemek yetmez; eğer `_Inventory` tablosunda 46-108 arası slot kayıtları fiziksel olarak açılmamışsa, oyuncu arka sayfalara eşya koyduğunda eşyalar kaybolabilir.
- Aşağıdaki sorgu hem karakter boyutunu 108 yapar hem de eksik olan tüm slotları `_Inventory` tablosuna otomatik tanımlar.
- İşlem öncesinde karakterin kesinlikle oyunda olmaması (Offline) gerekir.
Hatasız & Güvenli SQL Query Kodu
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- 1. ADIM: KARAKTER BİLGİSİ
-- ===================================================================
DECLARE @CharName VARCHAR(16) = 'Player' -- Çantası açılacak karakter adı
DECLARE @CharID INT = (SELECT CharID FROM dbo._Char WITH (NOLOCK) WHERE CharName16 = @CharName)
IF (@CharID IS NULL)
BEGIN
RAISERROR('HATA: Belirtilen karakter veritabanında bulunamadı!', 16, 1)
RETURN
END
-- ===================================================================
-- 2. ADIM: _Char TABLOSUNDA ENVANTER BOYUTUNU GÜNCELLE (108 = 3 Sayfa Full)
-- ===================================================================
UPDATE dbo._Char
SET InventorySize = 108
WHERE CharID = @CharID
-- ===================================================================
-- 3. ADIM: _Inventory TABLOSUNDAKİ EKSİK SLOTLARI OLUŞTURMA
-- (Slot 13 ile 108 arasındaki boş yuvaları fiziksel olarak ekler)
-- ===================================================================
DECLARE @CurrentSlot INT = 13
WHILE (@CurrentSlot <= 108)
BEGIN
-- Eğer bu slot tabloda mevcut değilse boş yuva olarak ekle
IF NOT EXISTS (SELECT 1 FROM dbo._Inventory WHERE CharID = @CharID AND Slot = @CurrentSlot)
BEGIN
INSERT INTO dbo._Inventory (CharID, Slot, ItemID)
VALUES (@CharID, @CurrentSlot, 0)
END
SET @CurrentSlot = @CurrentSlot + 1
END
PRINT '====================================================='
PRINT 'BAŞARILI: ' + @CharName + ' adlı karakterin çantası başarıyla 3 sayfa (108 Slot) olarak açıldı!'
PRINT '====================================================='
Neden Bu Prosedür Kullanılmalı?
- Sözdizimi Düzeltildi: Hatalı olan `Update(dbo._Char)` ve eksik `SET` sözdizimi temiz standart T-SQL formatına çevrildi.
- Kusursuz Slot Eşitlemesi:
WHILEdöngüsü ile 13 ile 108 arasındaki tüm slotların `_Inventory` tablosunda `ItemID = 0` (Boş) olarak fiziksel karşılığı açılır; bu sayede 2. ve 3. sayfalara konulan eşyaların kaybolma riski sıfırlanır. - Hızlı ve Güvenli: Karakter ID kontrolü yapılarak işlem doğrudan hedef oyuncuya uygulanır.
Nasıl Uygulanır?
- Hedef karakterin oyundan çıktığından (Offline) emin olun.
- SQL Server Management Studio (SSMS) programını açıp New Query butonuna tıklayın.
- Yukarıdaki kodu yapıştırın ve
@CharName = 'Player'kısmına karakterinizin nickini yazın. - F5 tuşuna basarak çalıştırın.
- Karakterle oyuna girdiğinizde envanter penceresindeki tüm sayfaların (1, 2 ve 3. sayfa) kilitsiz ve kullanıma hazır olduğunu göreceksiniz.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

