- #1
Konu Sahibi
: serkankacan
[REHBER & QUERY] vSRO Güvenli FGW Bekleme Süresi Sıfırlama ve Toplu Eşya Silme
Premium/Devil'i Bozmadan FGW Süresi Temizleme & Tüm Sunucudan Belirli Bir Eşyayı Yetim Kayıt Bırakmadan Silme
Premium/Devil'i Bozmadan FGW Süresi Temizleme & Tüm Sunucudan Belirli Bir Eşyayı Yetim Kayıt Bırakmadan Silme
Merhaba değerli forum sakinleri,
Silkroad Online sunucu yönetiminde sıkça başvurulan iki kritik işlem vardır:
- FGW (Forgotten World) Süresi Sıfırlama: Boyut kapısına giren oyuncunun tekrar girebilmesi için beklemesi gereken süreyi kaldırmak.
- Toplu Eşya Silme (Item Wipe): Bugla basılmış, yanlışlıkla dağıtılmış veya sunucudan kaldırılmasına karar verilmiş bir eşyayı (Örn: +20 bir silah veya aşırı basılmış bir kalkan) tüm karakterlerden, petlerden ve depolardan tek seferde silmek.
İnternetteki eski paylaşımlarda
_TimedJob tablosu filtresiz silindiği için karakterin Premium, Devil ve Godbless gibi tüm süreli eşyaları da yok olmaktadır! Aşağıdaki optimize kodlarla bu işlemleri %100 güvenle yapabilirsiniz.Kritik Güvenlik Uyarısı' Alıntı:DİKKAT:
- FGW süresi silinecek karakterin kesinlikle oyunda olmaması (Offline) gerekir. Karakter oyundayken DB silinse bile GameServer belleği çıkışta eski süreyi geri yazar.
- FGW bekleme süresinin
_TimedJobtablosundaki standart kategori karşılığı Category = 18'dir.- Toplu eşya silme işlemi geri alınamaz. İşlem öncesinde mutlaka SRO_VT_SHARD yedeğinizi alınız ve GameServer'ı kapatınız.
1. BÖLÜM: Karakterin FGW Süresini Sıfırlama (Premium/Devil'e Dokunmaz)
Bu sorgu sadece FGW giriş cezasını siler; karakterin Premium, Devil veya Godbless buff'larına asla zarar vermez:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- KARAKTER ADI
-- ===================================================================
DECLARE @CharName VARCHAR(16) = 'Gloryx' -- Süresi sıfırlanacak karakter
DECLARE @CharID INT = (SELECT CharID FROM dbo._Char WITH (NOLOCK) WHERE CharName16 = @CharName)
IF (@CharID IS NULL)
BEGIN
RAISERROR('HATA: Belirtilen karakter bulunamadı!', 16, 1)
RETURN
END
-- Category = 18: Forgotten World (FGW / Boyut Kapısı) Giriş Bekleme Süresi
DELETE FROM dbo._TimedJob
WHERE CharID = @CharID
AND Category = 18
PRINT '====================================================='
PRINT 'BAŞARILI: ' + @CharName + ' adlı karakterin FGW bekleme süresi sıfırlandı!'
PRINT 'Premium, Devil ve diğer bufflara dokunulmadı.'
PRINT '====================================================='
2. BÖLÜM: Tüm Sunucudan Belirli Bir Eşyayı Eksiksiz Silme (Full Wipe)
Bu sorgu; belirlediğiniz eşyayı oyuncu çantalarından (
_Inventory), avatar bölümlerinden (_InventoryForAvatar), bankalardan (_AccountChest), pet çantalarından (_InvCOS) ve klan kasasından (_GuildChest) kaldırır ve _Items tablosundaki karşılıklarını da temizleyerek veritabanında yetim kayıt bırakmaz:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- SİLİNECEK EŞYANIN KOD ADI
-- ===================================================================
DECLARE @ItemCodeName VARCHAR(128) = 'ITEM_CH_SHIELD_10_as4_RAINBOW'
-- 1. ADIM: Silinecek Eşyaların ItemID64 Listesini Geçici Havuzda Topla
DECLARE @TargetItems TABLE (ItemID64 BIGINT)
INSERT INTO @TargetItems (ItemID64)
SELECT I.ID64
FROM dbo._Items I WITH (NOLOCK)
INNER JOIN dbo._RefObjCommon ROC WITH (NOLOCK) ON I.RefItemID = ROC.ID
WHERE ROC.CodeName128 = @ItemCodeName
DECLARE @TotalCount INT = (SELECT COUNT(1) FROM @TargetItems)
IF (@TotalCount = 0)
BEGIN
PRINT 'Bilgi: Veritabanında silinecek bu eşyaya rastlanmadı.'
RETURN
END
BEGIN TRANSACTION
BEGIN TRY
-- 2. ADIM: Çanta ve Yuvalardaki Slot Bağlantılarını Sıfırla (0 yap)
UPDATE dbo._Inventory
SET ItemID = 0
WHERE ItemID IN (SELECT ItemID64 FROM @TargetItems)
UPDATE dbo._InventoryForAvatar
SET ItemID = 0
WHERE ItemID IN (SELECT ItemID64 FROM @TargetItems)
UPDATE dbo._AccountChest
SET ItemID = 0
WHERE ItemID IN (SELECT ItemID64 FROM @TargetItems)
UPDATE dbo._InvCOS
SET ItemID = 0
WHERE ItemID IN (SELECT ItemID64 FROM @TargetItems)
UPDATE dbo._GuildChest
SET ItemID = 0
WHERE ItemID IN (SELECT ItemID64 FROM @TargetItems)
-- 3. ADIM: _Items Tablosundan Fiziksel Olarak Tamamen Sil (Yetim Kayıt Bırakmaz)
DELETE FROM dbo._Items
WHERE ID64 IN (SELECT ItemID64 FROM @TargetItems)
COMMIT TRANSACTION
PRINT '====================================================='
PRINT 'BAŞARILI: Toplam ' + CAST(@TotalCount AS VARCHAR(10)) + ' adet ' + @ItemCodeName + ' tüm sunucudan eksiksiz silindi!'
PRINT '====================================================='
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'HATA OLUŞTU: Eşya silme işlemi geri alındı! Hata: ' + ERROR_MESSAGE()
END CATCH
Nasıl Uygulanır?
- FGW Sıfırlama İçin:
- Oyuncunun oyundan çıkmasını sağlayın.
- 1. Bölümdeki SQL kodunu SSMS'e yapıştırıp
@CharNamealanını doldurun ve F5 yapın. - Oyuncu tekrar oyuna girdiğinde boyut kapısına hemen girebilecektir.
- Toplu Eşya Silme İçin:
- Sunucudaki GameServer modüllerini kapatın (Ghost item oluşmaması için zorunludur).
- 2. Bölümdeki SQL kodunu açıp silmek istediğiniz eşyanın kodunu
@ItemCodeNamealanına yazın. - F5 tuşuna basarak çalıştırın.
- GameServer'ı tekrar açtığınızda sunucudaki hiçbir karakterde veya kasada o eşyadan eser kalmayacaktır.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

