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

vSro Paylaşım vSRO Thief Şehir İçi Kervan Malı Çalma Bug Fix

Cevaplar0
Görüntüleme6
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[FİX & REHBER] vSRO Thief Şehir İçi Kervan Malı Çalma Bug Fix
_AddLogItem (@Operation = 144) Üzerinden Güvenli Bölgede Pet Envanterine Kervan Malı Aktarımını Engelleme



Merhaba değerli forum sakinleri,

vSRO sunucularında hırsız (Thief) oyuncuların en sık başvurduğu suistimallerden biri; şehir girişlerinde veya güvenli bölgelerde (Safe Zone / Town) düşen veya transfer edilen kervan mallarını binek/toplayıcı hayvanlarının (COS) envanterine alarak cezasız ve risksiz şekilde kaçırmalarıdır.

Aşağıda paylaşılan prosedür; Thief rolündeki bir oyuncu savaş alanı dışındaki güvenli bir bölgede (IsBattleField = 0) petine kervan malı atmaya çalıştığı anda eşyayı tespit edip hem pet slotundan hem de veritabanından anında silerek hileyi tamamen geçersiz kılar.

Önemli Uyarı' Alıntı:
DİKKAT:
  • Bu kontrol SRO_VT_LOG veritabanındaki **_AddLogItem** prosedürüne eklenmelidir.
  • @ItemSerial ve ID64 alanları BIGINT olarak tanımlanmıştır; böylece yüksek ID'li sunucularda veri taşması (overflow) hatası yaşanmaz.
  • İşlem öncesinde SRO_VT_LOG yedeğinizi almayı unutmayınız.



Optimize Edilmiş _AddLogItem Prosedür Kodu

SRO_VT_LOG
veritabanını açın, **Programmability -> Stored Procedures -> _AddLogItem** prosedürüne sağ tıklayıp **Modify** deyin. AS satırının altına uygun bir yere şu bloğu ekleyin:

SQL:
-- ===================================================================
-- THIEF ŞEHİR İÇİ KERVAN MALI AKTARIM BUG FİX
-- @Operation = 144: Pet / COS Envanterine Eşya Aktarım Logu
-- ===================================================================
IF (@Operation = 144)
BEGIN
    DECLARE @JobType TINYINT
    DECLARE @IsBattleField BIT
    DECLARE @ItemID64 BIGINT

    -- 1. Karakterin meslek (Thief = 2) ve bulunduğu bölgenin savaş alanı durumunu kontrol et
    SELECT 
        @JobType = CTJ.JobType, 
        @IsBattleField = R.IsBattleField 
    FROM SRO_VT_SHARD.dbo._Char C WITH (NOLOCK)
    INNER JOIN SRO_VT_SHARD.dbo._CharTriJob CTJ WITH (NOLOCK) ON C.CharID = CTJ.CharID
    INNER JOIN SRO_VT_SHARD.dbo._RefRegion R WITH (NOLOCK) ON C.LatestRegion = R.wRegionID
    WHERE C.CharID = @CharID

    -- 2. Eğer karakter Thief ise ve güvenli bölgede (IsBattleField = 0) pete mal atıyorsa:
    IF (@JobType = 2 AND @IsBattleField = 0)
    BEGIN
        -- Eşyanın ID64 değerini yakala
        SELECT @ItemID64 = ID64 
        FROM SRO_VT_SHARD.dbo._Items WITH (NOLOCK) 
        WHERE Serial64 = @ItemSerial

        IF (@ItemID64 IS NOT NULL AND @ItemID64 > 0)
        BEGIN
            -- Pet envanterindeki slotu sıfırla
            UPDATE SRO_VT_SHARD.dbo._InvCOS 
            SET ItemID = 0 
            WHERE ItemID = @ItemID64

            -- _Items tablosundaki ölü/yetim kaydı temizle
            DELETE FROM SRO_VT_SHARD.dbo._Items 
            WHERE ID64 = @ItemID64
        END
    END
END



Yapılan İyileştirmeler Nelerdir?

  1. BIGINT Düzeltmesi: Eşya ID'si `int` yerine `bigint` yapılarak veri tabanı taşma hataları ve kilitlenmeler engellendi.
  2. WITH (NOLOCK) Koruması: Yoğun saatlerde eşya aktarımlarında veritabanı kilitlenmelerini (Deadlock) önlemek için sorguya tablo okuma kilit önleyicileri eklendi.
  3. Fiziksel Veri Temizliği: Sadece slotu `0` yapmak yerine `_Items` tablosundaki kayıt da silinerek haksız elde edilen eşyanın tamamen yok edilmesi sağlandı.



Nasıl Uygulanır?

  1. SQL Server Management Studio (SSMS) üzerinden `_AddLogItem` prosedürünü açın.
  2. Yukarıdaki kodu ekleyip F5 tuşuna basarak prosedürü güncelleyin.
  3. Herhangi bir GameServer restartına gerek kalmadan anında aktifleşir.

Sorularınızı ve takıldığınız noktaları konu altından sorabilirsiniz. Herkese keyifli ve adil oyunlar!
 

Konuyu görüntüleyenler

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