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

vSro Paylaşım vSRO Model Switcher Sistemi (Weapon Skin / Model Dönüştürücü)

Cevaplar0
Görüntüleme9
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[REHBER & SİSTEM] vSRO Model Switcher Sistemi (Weapon Skin / Model Dönüştürücü)
Slot 13'teki Silahın Artı, Blue ve Statlarını Korumalı Olarak Hedef Degree Görünümüne Dönüştürme



Merhaba değerli forum sakinleri,

Silkroad Online sunucularında oyuncuların kullandıkları yüksek degree silahların (örneğin 11 Dg veya 12 Dg) görünümünü sevdikleri eski bir degree (Örn: 8 Dg, 9 Dg veya 10 Dg Moon/Sun) modeline çevirebilmeleri için özel **Model Switcher Scroll** sistemi hazırlanır.

Aşağıda paylaşılan sistem; oyuncunun çantasının **ilk yuvasına (Slot 13)** koyduğu silahın türünü (Kılıç, Yay, Mızrak, Asa vb.) tespit eder, hedef degree modeline dönüştürür; bu işlemi yaparken **artı (+), stat, adv ve blue özelliklerini eksiksiz korur** ve senkronizasyon için oyuncuyu güvenle DC eder.

Önemli Kullanım Kuralları' Alıntı:
DİKKAT:
  • Oyuncu modelini değiştirmek istediği silahı envanterinin **ilk yuvasına (Slot 13)** koymalıdır.
  • Scroll basıldığında eşyanın yeni modelinin görünmesi ve GameServer bellek senkronizasyonunun bozulmaması için oyuncu anında oyundan düşürülür (DC edilir).
  • İşlem öncesinde SRO_VT_LOG ve SRO_VT_SHARD yedeklerinizi almayı unutmayınız.



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

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

SQL:
USE [SRO_VT_LOG]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE OR ALTER PROCEDURE dbo._MODEL_SWITCHER_MOON
    @CharID INT,
    @ScrollID INT
AS
BEGIN
    SET NOCOUNT ON;

    -- 1. Slot 13'teki eşyanın bilgilerini çek
    DECLARE @ItemID64 BIGINT
    DECLARE @CurRefItemID INT
    DECLARE @CurCodeName VARCHAR(128)

    SELECT 
        @ItemID64 = INV.ItemID,
        @CurRefItemID = IT.RefItemID,
        @CurCodeName = ROC.CodeName128
    FROM SRO_VT_SHARD.dbo._Inventory INV WITH (NOLOCK)
    INNER JOIN SRO_VT_SHARD.dbo._Items IT WITH (NOLOCK) ON IT.ID64 = INV.ItemID
    INNER JOIN SRO_VT_SHARD.dbo._RefObjCommon ROC WITH (NOLOCK) ON ROC.ID = IT.RefItemID
    WHERE INV.CharID = @CharID 
      AND INV.Slot = 13 
      AND INV.ItemID > 0

    -- Slot boşsa veya eşya silah değilse işlemi iptal et
    IF (@ItemID64 IS NULL OR @CurCodeName NOT LIKE 'ITEM_%')
        RETURN;

    -- 2. Scroll ID'sine göre hedef Degree değerini belirle
    -- (Örnek: 78001 -> 1 Dg, 78008 -> 8 Dg, 78012 -> 12 Dg)
    DECLARE @TargetDegree INT = (@ScrollID - 78000)
    DECLARE @TargetDegreeStr VARCHAR(4) = RIGHT('0' + CAST(@TargetDegree AS VARCHAR(2)), 2)

    -- 3. Silahın gövde türünü belirle (Örn: SWORD, BOW, SPEAR, TSTAFF vb.)
    -- Standart format: ITEM_CH_SWORD_11_C_RARE veya ITEM_EU_DAGGER_11_B_RARE
    DECLARE @WeaponType VARCHAR(32)

    IF (@CurCodeName LIKE '%SWORD%')        SET @WeaponType = 'SWORD'
    ELSE IF (@CurCodeName LIKE '%BLADE%')   SET @WeaponType = 'BLADE'
    ELSE IF (@CurCodeName LIKE '%SPEAR%')   SET @WeaponType = 'SPEAR'
    ELSE IF (@CurCodeName LIKE '%GLAND%')   SET @WeaponType = 'GLAND'
    ELSE IF (@CurCodeName LIKE '%BOW%')     SET @WeaponType = 'BOW'
    ELSE IF (@CurCodeName LIKE '%SHIELD%')  SET @WeaponType = 'SHIELD'
    ELSE IF (@CurCodeName LIKE '%TSWORD%')  SET @WeaponType = 'TSWORD'
    ELSE IF (@CurCodeName LIKE '%AXE%')     SET @WeaponType = 'AXE'
    ELSE IF (@CurCodeName LIKE '%DARKSTAFF%') SET @WeaponType = 'DARKSTAFF'
    ELSE IF (@CurCodeName LIKE '%TSTAFF%')  SET @WeaponType = 'TSTAFF'
    ELSE IF (@CurCodeName LIKE '%CROSSBOW%') SET @WeaponType = 'CROSSBOW'
    ELSE IF (@CurCodeName LIKE '%DAGGER%')  SET @WeaponType = 'DAGGER'
    ELSE IF (@CurCodeName LIKE '%HARP%')    SET @WeaponType = 'HARP'
    ELSE IF (@CurCodeName LIKE '%STAFF%')   SET @WeaponType = 'STAFF'
    ELSE RETURN;

    -- 4. Hedef Moon modelinin RefItemID karşılığını _RefObjCommon'dan bul
    DECLARE @NewRefItemID INT = (
        SELECT TOP 1 ID 
        FROM SRO_VT_SHARD.dbo._RefObjCommon 
        WHERE CodeName128 LIKE 'ITEM_%_' + @WeaponType + '_' + @TargetDegreeStr + '_%_RARE'
          AND Service = 1
        ORDER BY ID DESC
    )

    -- 5. Eğer geçerli bir model ID bulunduysa eşyayı güncelle ve oyuncuyu DC et
    IF (@NewRefItemID IS NOT NULL AND @NewRefItemID > 0)
    BEGIN
        -- Sadece RefItemID güncellenir; OptLevel, Data ve MagParam'lar aynen korunur
        UPDATE SRO_VT_SHARD.dbo._Items 
        SET RefItemID = @NewRefItemID 
        WHERE ID64 = @ItemID64

        -- Senkronizasyon için karakteri DC et
        UPDATE SRO_VT_SHARD.dbo._User 
        SET Sec_Primary = 1 
        WHERE CharID = @CharID
    END
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 şu optimize tetikleyiciyi ekleyin:

SQL:
-- ===================================================================
-- MODEL SWITCHER TETİKLEYİCİSİ
-- @Operation = 41 (Eşya Kullanımı)
-- 78001 - 78012 (1 Dg ile 12 Dg Arası Moon Switcher Scroll ID'leri)
-- ===================================================================
IF (@Operation = 41 AND (@ItemRefID BETWEEN 78001 AND 78012))
BEGIN
    EXEC SRO_VT_LOG.dbo._MODEL_SWITCHER_MOON @CharID, @ItemRefID
END



Nasıl Test Edilir?

  1. Her iki SQL kodunu da veritabanınızda derleyin (F5 / Execute).
  2. Dönüştürmek istediğiniz silahı çantanızın **ilk yuvasına (Slot 13)** koyun.
  3. Örneğin 9 Dg Moon görünümü veren 78009 numaralı scroll'a sağ tıklayın.
  4. Karakter oyundan düşecektir (DC).
  5. Tekrar oyuna girdiğinizde silahınızın yeni modele dönüştüğünü, artı (+), blue ve statlarının eksiksiz korunduğunu göreceksiniz.

Sorularınızı ve farklı model varyasyon taleplerinizi konu altından belirtebilirsiniz. Herkese iyi forumlar!
 

Konuyu görüntüleyenler

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