İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

vSro Paylaşım vSRO Toplayıcı Petleri (Grab Pet) 5 Sayfa (Full Slot) Açma

Cevaplar0
Görüntüleme5
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[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



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?

  1. SQL kodunu SRO_VT_SHARD üzerinde derleyin (F5 / Execute).
  2. Oyuna girip sıfır açılmamış bir toplayıcı pet parşömenini (Örn: Maymun veya Tavşan) çantanıza alın.
  3. Parşömene sağ tıklayarak pete isim verip açın.
  4. 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!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Etiketler
Etiketler Etiketler
database pet prosedür sql vsro
Şu anda sitemizde 40,464 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,311
Mesajlar 4,191
Kullanıcılar 1,624
Son üye mrt
Geri
Üst