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

vSro Paylaşım vSRO Otomatik Artı (+) Sınırlama (Max Plus Limiter)

Cevaplar0
Görüntüleme8
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[GÜVENLİK & SİSTEM] vSRO Otomatik Artı (+) Sınırlama (Max Plus Limiter)
_AddLogItem (@Operation = 90) Üzerinden Belirlenen Limitin Üzerine Çıkan Eşyaları Otomatik Geri Çekme



Merhaba değerli forum sakinleri,

Silkroad Online sunucularınızda oyun dengesini korumak ve simya (alchemy) sınırını belirli bir seviyede (örneğin maksimum **+12**) tutmak isteyebilirsiniz.

İnternette dolaşan satır satır `LIKE '%Opt: +13%'` yazılmış eski sorgular hem sunucuda gereksiz gecikme (lag) yaratır hem de `+20`'nin üzerindeki basımları yakalayamaz. Ayrıca oyuncu DC edilmediği takdirde `GameServer` belleği eşyayı hala yüksek artı seviyesinde tutmaya devam eder.

Aşağıda paylaşılan optimize sistem; simya işlemi başarılı olduğunda eşyanın artı seviyesini anlık olarak kontrol eder, sınırın üstündeyse belirlenen maksimum değere geri sabitler ve bellek senkronizasyonu için oyuncuyu oyundan düşürür (DC eder).

Önemli Güvenlik Kuralları' Alıntı:
DİKKAT:
  • Bu kontrol SRO_VT_LOG içerisindeki **_AddLogItem** prosedürüne eklenir.
  • @Operation = 90, simya (Elixir / Alchemy) sonucunda eşyanın seviye atladığı log tipidir.
  • Eşyanın veritabanındaki yeni artısının istemciye ve GameServer'a tam yansıması için kuralı aşan oyuncu anında DC edilir.
  • İşlem öncesinde SRO_VT_LOG yedeğinizi almayı unutmayınız.



Hatasız & Optimize Edilmiş _AddLogItem Kodu

SRO_VT_LOG
veritabanındaki **_AddLogItem** prosedürünü açın (Modify) ve AS satırının altına şu optimize bloğu ekleyin:

SQL:
-- ===================================================================
-- ARTI (+) SINIRLAMA SİSTEMİ (MAX PLUS LIMITER)
-- @Operation = 90: Simya Başarılı Seviye Yükselme Logu
-- ===================================================================
IF (@Operation = 90)
BEGIN
    DECLARE @MaxPlusLimit INT = 12 -- Sunucunuzda izin verilen MAKSİMUM artı sınırı

    -- 1. Eşyanın güncel OptLevel değerini _Items tablosundan sayısal olarak çek
    DECLARE @CurrentOptLevel INT

    SELECT @CurrentOptLevel = OptLevel 
    FROM SRO_VT_SHARD.dbo._Items WITH (NOLOCK) 
    WHERE Serial64 = @ItemSerial

    -- 2. Eğer artı sınırı aşıldıysa (Örn: +13 ve üzeri basıldıysa)
    IF (@CurrentOptLevel > @MaxPlusLimit)
    BEGIN
        -- Eşyanın artısını izin verilen maksimum sınıra geri çek
        UPDATE SRO_VT_SHARD.dbo._Items 
        SET OptLevel = @MaxPlusLimit 
        WHERE Serial64 = @ItemSerial

        -- KRİTİK ADIM: GameServer belleğindeki yüksek artının sıfırlanması için oyuncuyu anında DC et
        UPDATE SRO_VT_SHARD.dbo._User 
        SET Sec_Primary = 1 
        WHERE CharID = @CharID
    END
END



Neden Bu Yöntem Tercih Edilmeli?

  1. Tekil ve Sayısal Denetim: String aramaları (`LIKE`) yerine doğrudan tamsayı karşılaştırması (`> @MaxPlusLimit`) kullanılır; işlemciyi yormaz ve kilitlenme (deadlock) oluşturmaz.
  2. Sınırsız Kapsam: Oyuncu +13, +20 veya exploit ile +50 dahi bassa tek satırlık büyüktür şartı tüm sınır aşımlarını eksiksiz yakalar.
  3. Bellek Eşitliği (Anti-Rollback): Sec_Primary = 1 komutu sayesinde oyuncunun istemcisi anında kapatılarak sunucu belleğindeki sahte güç değeri silinir.



Nasıl Uygulanır?

  1. SQL Server Management Studio (SSMS) üzerinden `_AddLogItem` prosedürünü açın.
  2. Yukarıdaki kodu ekleyip en üstteki @MaxPlusLimit = 12 değerini kendi sunucu politikanıza göre ayarlayın.
  3. F5 tuşuna basarak prosedürü derleyin.
  4. Sunucu restartı gerektirmez, hemen o saniye devreye girer.

Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

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