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

vSro Paylaşım vSRO Gelişmiş Elixir (ADV) Silme Scroll Sistemi

Cevaplar0
Görüntüleme7
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[REHBER & SİSTEM] vSRO Gelişmiş Elixir (ADV) Silme Scroll Sistemi
Slot 13'teki Eşyaya Basılmış Olan ADV (+1 / +2 / +3 / +4) Değerini Güvenle Temizleme



Merhaba değerli forum sakinleri,

Silkroad Online sunucularında oyuncuların eşyalarına bastıkları Advanced Elixir (ADV) değerlerini silip yerine daha yüksek bir ADV basabilmeleri ya da eşyayı saf haline döndürebilmeleri için **ADV Silici Scroll** sistemi kullanılır.

Aşağıdaki prosedür; oyuncunun çantasının **ilk yuvasına (Slot 13)** yerleştirdiği eşyadaki ADV büyü parametresini (`OPT_LEVEL` / ADV Magic Param) tespit eder, ADV'den gelen artı miktarını eşyanın toplam artısından (OptLevel) düşer, parametreyi sıfırlar ve eşyayı yeni bir basım işlemine hazır hale getirir.

Önemli Kullanım Kuralları' Alıntı:
DİKKAT:
  • Oyuncu ADV değerini silmek istediği silah veya zırhı envanterinin **ilk yuvasına (Slot 13)** koymalıdır.
  • Scroll kullanıldığında veritabanı ile GameServer belleğinin birebir eşitlenmesi için oyuncu otomatik olarak oyundan düşürülür (DC edilir).
  • Eşyanın üzerindeki STR, INT, HP, MP gibi diğer standart Blue ve White statlarına kesinlikle dokunulmaz.
  • İşlem öncesinde SRO_VT_LOG ve SRO_VT_SHARD yedeğinizi almayı unutmayınız.



1. ADIM: _ADV_REMOVER Prosedürünü Oluşturma

SRO_VT_LOG
veritabanını seçip aşağıdaki ana motor prosedürünü derleyin:

SQL:
USE [SRO_VT_LOG]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE OR ALTER PROCEDURE dbo._ADV_REMOVER
    @CharID INT
AS
BEGIN
    SET NOCOUNT ON;

    -- 1. Slot 13'teki eşyanın bilgilerini çek
    DECLARE @ItemID64 BIGINT
    DECLARE @CurOptLevel INT
    DECLARE @MagParamNum INT
    DECLARE @MagParam1 BIGINT, @MagParam2 BIGINT, @MagParam3 BIGINT, @MagParam4 BIGINT
    DECLARE @MagParam5 BIGINT, @MagParam6 BIGINT, @MagParam7 BIGINT, @MagParam8 BIGINT

    SELECT 
        @ItemID64 = INV.ItemID,
        @CurOptLevel = IT.OptLevel,
        @MagParamNum = IT.MagParamNum,
        @MagParam1 = IT.MagParam1, @MagParam2 = IT.MagParam2,
        @MagParam3 = IT.MagParam3, @MagParam4 = IT.MagParam4,
        @MagParam5 = IT.MagParam5, @MagParam6 = IT.MagParam6,
        @MagParam7 = IT.MagParam7, @MagParam8 = IT.MagParam8
    FROM SRO_VT_SHARD.dbo._Inventory INV WITH (NOLOCK)
    INNER JOIN SRO_VT_SHARD.dbo._Items IT WITH (NOLOCK) ON IT.ID64 = INV.ItemID
    WHERE INV.CharID = @CharID 
      AND INV.Slot = 13 
      AND INV.ItemID > 0

    -- Slot boşsa işlemi iptal et
    IF (@ItemID64 IS NULL OR @ItemID64 <= 0)
        RETURN;

    -- 2. ADV Değerini ve Parametre Yuvasını Tespit Et
    -- vSRO'da ADV parametre tip değeri genellikle 268435456 (0x10000000) veya türevidir.
    -- Basılan ADV miktarı (Örn: +1, +2, +4) parametrenin değer alanından okunur.
    DECLARE @AdvAmount INT = 0
    DECLARE @TargetParamIndex INT = 0

    -- Parametreleri kontrol et (Hangi yuvada ADV var?)
    IF (@MagParam1 & 0xFFFFFFFF00000000) > 0 AND (@MagParam1 & 0x00000000FFFFFFFF) = 268435456
    BEGIN
        SET @TargetParamIndex = 1
        SET @AdvAmount = (@MagParam1 >> 32) & 0xFF
    END
    ELSE IF (@MagParam2 & 0xFFFFFFFF00000000) > 0 AND (@MagParam2 & 0x00000000FFFFFFFF) = 268435456
    BEGIN
        SET @TargetParamIndex = 2
        SET @AdvAmount = (@MagParam2 >> 32) & 0xFF
    END
    ELSE IF (@MagParam3 & 0xFFFFFFFF00000000) > 0 AND (@MagParam3 & 0x00000000FFFFFFFF) = 268435456
    BEGIN
        SET @TargetParamIndex = 3
        SET @AdvAmount = (@MagParam3 >> 32) & 0xFF
    END
    ELSE IF (@MagParam4 & 0xFFFFFFFF00000000) > 0 AND (@MagParam4 & 0x00000000FFFFFFFF) = 268435456
    BEGIN
        SET @TargetParamIndex = 4
        SET @AdvAmount = (@MagParam4 >> 32) & 0xFF
    END

    -- Eğer eşyada ADV bulunamadıysa işlem yapma
    IF (@TargetParamIndex = 0 OR @AdvAmount <= 0)
        RETURN;

    -- 3. OptLevel'ı ADV miktarı kadar düşür ve ilgili parametreyi NULL yap
    DECLARE @NewOptLevel INT = @CurOptLevel - @AdvAmount
    IF (@NewOptLevel < 0) SET @NewOptLevel = 0

    IF (@TargetParamIndex = 1)
        UPDATE SRO_VT_SHARD.dbo._Items SET OptLevel = @NewOptLevel, MagParam1 = NULL, MagParamNum = MagParamNum - 1 WHERE ID64 = @ItemID64;
    ELSE IF (@TargetParamIndex = 2)
        UPDATE SRO_VT_SHARD.dbo._Items SET OptLevel = @NewOptLevel, MagParam2 = NULL, MagParamNum = MagParamNum - 1 WHERE ID64 = @ItemID64;
    ELSE IF (@TargetParamIndex = 3)
        UPDATE SRO_VT_SHARD.dbo._Items SET OptLevel = @NewOptLevel, MagParam3 = NULL, MagParamNum = MagParamNum - 1 WHERE ID64 = @ItemID64;
    ELSE IF (@TargetParamIndex = 4)
        UPDATE SRO_VT_SHARD.dbo._Items SET OptLevel = @NewOptLevel, MagParam4 = NULL, MagParamNum = MagParamNum - 1 WHERE ID64 = @ItemID64;

    -- 4. Senkronizasyon için karakteri DC et
    UPDATE SRO_VT_SHARD.dbo._User 
    SET Sec_Primary = 1 
    WHERE CharID = @CharID
END
GO



2. ADIM: _AddLogItem Tetikleyicisine Bağlama

SRO_VT_LOG
içerisindeki **_AddLogItem** prosedürünü açarak AS satırının altına tetikleyiciyi ekleyin:

SQL:
-- ===================================================================
-- ADV SİLİCİ SCROLL TETİKLEYİCİSİ
-- @Operation = 41 (Eşya Kullanımı)
-- 78013 (ADV Silici Scroll ID'si)
-- ===================================================================
IF (@Operation = 41 AND @ItemRefID = 78013)
BEGIN
    EXEC SRO_VT_LOG.dbo._ADV_REMOVER @CharID
END



Nasıl Test Edilir?

  1. SQL kodlarını veritabanınızda okutun (F5 / Execute).
  2. Üzerinde ADV basılı olan bir eşyayı (örneğin +9 [+2 ADV] bir kılıcı) çantanızın **ilk yuvasına (Slot 13)** yerleştirin.
  3. 78013 numaralı ADV silici parşömene sağ tıklayarak kullanın.
  4. Karakter oyundan düşecektir (Disconnect).
  5. Tekrar oyuna girdiğinizde silahın artı değerinin saf haline (+7) döndüğünü, diğer hiçbir blue ve statın bozulmadığını göreceksiniz.

Sorularınızı ve takıldığınız yerleri bu konu altından paylaşabilirsiniz. Herkese iyi forumlar!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 40,422 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,311
Mesajlar 4,191
Kullanıcılar 1,624
Son üye mrt
Geri
Üst