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

vSro Paylaşım vSRO Max Level İlk 100/110 Oyuncuya Otomatik Ödül Sistemi

Cevaplar0
Görüntüleme2
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[SİSTEM & ETKİNLİK] vSRO Max Level İlk 100/110 Oyuncuya Otomatik Ödül Sistemi
_AddLogChar Üzerinden Seviye Sınırına Ulaşan İlk Oyunculara İstismarsız (Anti De-Level) Otomatik Ödül Dağıtımı



Merhaba değerli forum sakinleri,

Yeni açılan sunucularda rekabeti ve kasılma hırsını artırmak amacıyla en çok tercih edilen sistemlerin başında **Max Level Yarışı (İlk X Kişiye Ödül)** gelir. Oyuncu belirlenen tavan seviyeye (Örn: 80, 90, 100, 110 Cap) ulaştığı an sistem otomatik olarak ödülünü envanterine tanımlar ve duyuru geçer.

İnternette paylaşılan eski sorgularda sec_content hatalı kullanıldığı için normal oyuncular ödül alamamakta, üstelik oyuncular 109'a düşüp tekrar 110 olarak sistemi sonsuz eşya/silk buguna sokabilmektedir.

Aşağıda paylaşılan optimize sistem;
  • Oyuncunun ödülü daha önce alıp almadığını kontrol ederek **De-Level (seviye düşüp tekrar alma) bugunu %100 engeller**,
  • Belirlediğiniz kişi kotası (Örn: **İlk 100 kişi**) dolduğunda ödül dağıtımını otomatik olarak durdurur,
  • Tüm ödül alan karakterleri tarih ve sıralama bilgisiyle ayrı bir log tablosunda saklar.

Teknik Bilgilendirme (Event ID)' Alıntı:
  • _AddLogChar EventID = 22: Karakterin seviye atladığını (Level Up) belirten Joymax sistem log kodudur.
  • @data2: Karakterin atladığı yeni seviyedir (Örn: 110).
  • İşlem öncesinde SRO_VT_LOG ve SRO_VT_SHARD yedeklerinizi alınız.



1. ADIM: Ödül Takip Tablosunu Oluşturma

Ödül alanların kaydını tutmak ve tekrar almalarını önlemek için SRO_VT_SHARD üzerinde şu tabloyu oluşturun:

SQL:
USE [SRO_VT_SHARD]
GO

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = '_MaxLevelRewards')
BEGIN
    CREATE TABLE dbo._MaxLevelRewards (
        ID INT IDENTITY(1,1) PRIMARY KEY,
        CharID INT NOT NULL,
        CharName VARCHAR(16) NOT NULL,
        RewardOrder INT NOT NULL,
        ReachLevel INT NOT NULL,
        RewardDate DATETIME DEFAULT GETDATE()
    )
    PRINT 'Ödül takip tablosu (_MaxLevelRewards) başarıyla oluşturuldu.'
END



2. ADIM: _AddLogChar Prosedürüne Eklenecek Kod

SRO_VT_LOG
veritabanındaki **[_AddLogChar]** prosedürünü açın (Modify) ve AS satırının hemen altına aşağıdaki bloğu ekleyin:

SQL:
-- ===================================================================
-- MAX LEVEL ÖDÜL SİSTEMİ (İLK 100 KİŞİ)
-- @EventID = 22: Level Atlaması
-- @data2: Yeni ulaşılan seviye (Örn: 110)
-- ===================================================================
IF (@EventID = 22 AND @data2 = 110)
BEGIN
    DECLARE @MaxRewardLimit INT = 100 -- Ödül verilecek toplam kişi sayısı (Kota)
    DECLARE @TargetLevel INT = 110    -- Hedef seviye

    -- 1. Bu karakter daha önce bu seviyenin ödülünü aldı mı? (De-Level Bug Fix)
    IF NOT EXISTS (SELECT 1 FROM SRO_VT_SHARD.dbo._MaxLevelRewards WITH (NOLOCK) WHERE CharID = @CharID AND ReachLevel = @TargetLevel)
    BEGIN
        -- 2. Şu ana kadar ödülü kaç kişi aldı?
        DECLARE @CurrentRewardCount INT = (SELECT COUNT(1) FROM SRO_VT_SHARD.dbo._MaxLevelRewards WITH (NOLOCK) WHERE ReachLevel = @TargetLevel)

        -- 3. Kota dolmadıysa ödülü ver
        IF (@CurrentRewardCount < @MaxRewardLimit)
        BEGIN
            DECLARE @RewardOrder INT = @CurrentRewardCount + 1
            DECLARE @WinnerCharName VARCHAR(16) = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WITH (NOLOCK) WHERE CharID = @CharID)

            -- Ödülü Çantaya Gönder (Örn: 50 Adet Arena Coin)
            EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @WinnerCharName, 'ITEM_ETC_ARENA_COIN', 50, 0

            -- Tabloya Başarıyla Kaydet (Tekrar almasını engeller)
            INSERT INTO SRO_VT_SHARD.dbo._MaxLevelRewards (CharID, CharName, RewardOrder, ReachLevel)
            VALUES (@CharID, @WinnerCharName, @RewardOrder, @TargetLevel)
        END
    END
END



3. ADIM: Ödül Kazananları Görüntüleme (Yönetici Sorgusu)

Sunucunuzda seviye ödülünü kazanan oyuncuları sıralı liste halinde görmek için:

SQL:
USE [SRO_VT_SHARD]
GO

SELECT 
    RewardOrder AS [Sıralama],
    CharName    AS [Karakter Adı],
    ReachLevel  AS [Ulaşılan Seviye],
    RewardDate  AS [Ödül Alınma Tarihi]
FROM dbo._MaxLevelRewards WITH (NOLOCK)
ORDER BY RewardOrder ASC



Nasıl Test Edilir?

  1. Tabloyu ve prosedürü derledikten sonra oyuna bir test karakteriyle girin.
  2. Karakteri 109 seviyeye getirin ve canavar keserek 110 seviyeye atlatın.
  3. Çantanıza ödülün geldiğini ve _MaxLevelRewards tablosuna kaydınızın 1. sıra olarak düştüğünü doğrulayın.
  4. Karakterle canavara ölüp 109'a düşün ve tekrar 110 olun; sistemin de-level kontrolü sayesinde ikinci kez ödül vermediğini test edin.

Sorularınızı ve ek ödül fikirlerinizi konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

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