- #1
Konu Sahibi
: serkankacan
[REHBER & SİSTEM] vSRO Toplayıcı Petleri (Grab Pet) 5 Sayfa (Full Slot) Açma
_AddNewCOS Prosedürü ve _AddTimedJobForPet Üzerinden Petlere Otomatik 5 Sayfa Envanter Tanımlama
_AddNewCOS Prosedürü ve _AddTimedJobForPet Üzerinden Petlere Otomatik 5 Sayfa Envanter Tanımlama
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında toplayıcı hayvanların (Grab Pet - Maymun, Sincap, Domuz, Tavşan vb.) standart envanter boyutu genellikle 1 veya 2 sayfadır. Oyuncuların eşya toplarken çantalarının hemen dolmasını engellemek amacıyla pet açıldığı anda otomatik olarak **5 Sayfa (112 Slot Ekstra Kapasite)** açılmasını sağlayabilirsiniz.
Bu sistem; pet parşömenine ilk kez sağ tıklanıp pet üretildiği an (
_AddNewCOS), arka planda yaklaşık 7684 günlük envanter genişletme buff'ını (_AddTimedJobForPet) otomatik olarak pete işler.Önemli Sistem Hatırlatması' Alıntı:DİKKAT:
- Bu düzenleme SRO_VT_SHARD veritabanındaki [_AddNewCOS] prosedürünü günceller.
- Bu prosedür yeni oluşturulan / yere ilk kez çağrılan tüm toplayıcı petlere otomatik olarak 5 sayfa verir.
- Daha önceden oyuncuların envanterinde açılmış olan eski petleri de 5 sayfa yapmak için konunun altındaki Ekstra SQL Sorgusunu kullanabilirsiniz.
- İşlem öncesinde SRO_VT_SHARD yedeğinizi almayı unutmayınız.
1. ADIM: _AddNewCOS Prosedürünü Güncelleme
SRO_VT_SHARD veritabanını seçip aşağıdaki prosedürü derleyin:
SQL:
USE [SRO_VT_SHARD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_AddNewCOS]
@OwnerCharID INT,
@RefObjID INT,
@Level INT,
@HP INT,
@MP INT,
@HGP INT,
@KeeperNPC INT,
@State INT,
@InventorySize INT,
@itemID BIGINT,
@PickItemConfig TINYINT,
@RentEndTime SMALLDATETIME
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRAN
DECLARE @COS_ID INT
-- Petin Maksimum Kapasitesini Al
DECLARE @MaxInventorySize TINYINT
SELECT @MaxInventorySize = ROCH.InventorySize
FROM dbo._RefObjCommon ROC WITH (NOLOCK)
INNER JOIN dbo._RefObjChar ROCH WITH (NOLOCK) ON ROC.Link = ROCH.ID
WHERE ROC.ID = @RefObjID
IF (@@ROWCOUNT = 0 OR @MaxInventorySize < @InventorySize)
BEGIN
ROLLBACK TRAN
RETURN -5
END
-- _CharCOS Tablosuna Peti Kaydet
INSERT INTO dbo._CharCOS (
OwnerCharID, RefObjID, HP, MP, KeeperNPC, [State],
PickItemConfig, [Level], Exp, HGP, PetOption, RentEndTime
)
VALUES (
@OwnerCharID, @RefObjID, @HP, @MP, @KeeperNPC, @State,
NULL, @Level, 0, @HGP, @PickItemConfig, @RentEndTime
)
SET @COS_ID = SCOPE_IDENTITY()
IF (@COS_ID = 0 OR @@ERROR <> 0)
BEGIN
ROLLBACK TRAN
RETURN -1
END
-- Pet Temel Envanter Slotlarını Oluştur (_InvCOS)
IF (@MaxInventorySize > 0)
BEGIN
DECLARE @Slot INT = 0
WHILE (@Slot < @MaxInventorySize)
BEGIN
INSERT INTO dbo._InvCOS (COS_ID, Slot, ItemID)
VALUES (@COS_ID, @Slot, 0)
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
RETURN -2
END
SET @Slot = @Slot + 1
END
END
-- Eşya ile çağrılan pet ise Item Data eşleştirmesi yap
IF (@itemID <> 0)
BEGIN
UPDATE dbo._Items
SET Data = @COS_ID
WHERE ID64 = @itemID
IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
BEGIN
ROLLBACK TRAN
RETURN -4
END
-- ===================================================================
-- TOPLAYICI PETLER İÇİN 5 SAYFA (112 SLOT) OTOMATİK TANIMLAMA
-- 7684 Günlük Envanter Genişletme Süresi Ekler
-- ===================================================================
DECLARE @Serial64 BIGINT
SELECT @Serial64 = Serial64 FROM dbo._Items WITH (NOLOCK) WHERE ID64 = @itemID
-- 22926: Envanter Genişletme Eşyası Referansı (Standart vSRO)
EXEC dbo._AddTimedJobForPet @COS_ID, 5, 22926, 1992999999, 1111708465, 1, 112, 0, 0, 0, 0, 0, @Serial64
END
COMMIT TRAN
RETURN @COS_ID
END
GO
2. ADIM: Daha Önceden Açılmış Mevcut Petleri 5 Sayfa Yapma
Sunucunuzda oyuncuların halihazırda kullandığı eski petlerin de 5 sayfaya yükselmesini isterseniz, sunucu bakımdayken şu sorguyu çalıştırmanız yeterlidir:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- MEVCUT AÇILMIŞ TÜM PETLERE 5 SAYFA VERME SORGUSU
-- ===================================================================
DECLARE @COS_ID INT
DECLARE @Serial64 BIGINT
DECLARE PetCursor CURSOR FOR
SELECT I.Data, I.Serial64
FROM dbo._Items I WITH (NOLOCK)
INNER JOIN dbo._RefObjCommon ROC WITH (NOLOCK) ON ROC.ID = I.RefItemID
WHERE ROC.CodeName128 LIKE 'ITEM_COS_P_%' -- Toplayıcı Pet Kodları
AND I.Data > 0
OPEN PetCursor
FETCH NEXT FROM PetCursor INTO @COS_ID, @Serial64
WHILE @@FETCH_STATUS = 0
BEGIN
-- Eğer petin aktif bir çanta süresi yoksa ekle
IF NOT EXISTS (SELECT 1 FROM dbo._TimedJobForPet WHERE COS_ID = @COS_ID AND Category = 5)
BEGIN
EXEC dbo._AddTimedJobForPet @COS_ID, 5, 22926, 1992999999, 1111708465, 1, 112, 0, 0, 0, 0, 0, @Serial64
END
FETCH NEXT FROM PetCursor INTO @COS_ID, @Serial64
END
CLOSE PetCursor
DEALLOCATE PetCursor
PRINT 'Tüm mevcut toplayıcı petlerin envanteri 5 sayfa olarak güncellendi!'
Nasıl Test Edilir?
- SQL kodunu SRO_VT_SHARD üzerinde derleyin (F5 / Execute).
- Oyuna girip sıfır açılmamış bir toplayıcı pet parşömenini (Örn: Maymun veya Tavşan) çantanıza alın.
- Parşömene sağ tıklayarak pete isim verip açın.
- Peti çağırdığınızda envanter penceresindeki **tüm 5 sayfanın kilitsiz ve kullanıma hazır** olduğunu göreceksiniz.
Sorularınızı ve takıldığınız yerleri bu konu altından paylaşabilirsiniz. Herkese keyifli geliştirmeler!

