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

vSro Paylaşım vSRO Logger ile Unique Kesince Anlık Honor Puanı Verme

Cevaplar0
Görüntüleme3
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[SİSTEM & REHBER] vSRO Logger ile Unique Kesince Anlık Honor Puanı Verme
__Log_UniqueKills Prosedürü Üzerinden Tiger Girl, Uruchi, Isyutaru, Lord Yarkan ve Özel Uniquelerden Anlık Akademi Puanı Kazanma



Merhaba değerli forum sakinleri,

Silkroad Online sunucularında oyuncuların yalnızca akademi kasarak (çırak mezun ederek) değil, haritadaki ve etkinliklerdeki **Unique canavarları keserek de Honor Puanı** kazanabilmesi sunucudaki rekabeti ve Unique avcılığını ciddi ölçüde canlandırır.

Birçok harici Logger programında (PureLogger, Filter Logger vb.) Unique kesildiği an __Log_UniqueKills prosedürü tetiklenir.

Eski paylaşımlarda her canavar için tek tek değişken (@CampID2, @CampID3...) tanımlandığı için kod spagettiye dönmekte, üstelik akademisi olmayan bir karakter Unique kestiğinde veritabanında gereksiz boş sorgular dönmektedir.

Aşağıda paylaşılan optimize sistem tek bir temiz blokla çalışır; canavara göre verilecek puanı belirler, akademisi olan oyuncunun puanını hem _TrainingCamp hem de _TrainingCampMember tablolarına anında işler.

Teknik Bilgilendirme' Alıntı:
  • _TrainingCamp (EvaluationPoint): Akademinin genel puanını ve sıralamadaki yerini belirler.
  • _TrainingCampMember (HonorPoint): Karakterin şahsi Honor puanıdır.
  • Akademi Zorunluluğu: Karakterin puan alabilmesi için oyunda önceden bir akademi açmış olması gerekmektedir (CampID > 0).
  • İşlem öncesinde PureLogger (veya kullandığınız Logger DB) ve SRO_VT_SHARD yedeklerinizi almayı unutmayınız.



Hatasız & Optimize Edilmiş __Log_UniqueKills Prosedürü

Logger veritabanınızı seçip aşağıdaki optimize prosedürü derleyin:

SQL:
USE [PureLogger] -- Kendi Logger veritabanı adınızı yazın (Örn: PureLogger, KGuardEDGE vb.)
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[__Log_UniqueKills]
    @MobID      INT,
    @KillerName VARCHAR(32)
AS
BEGIN
    SET NOCOUNT ON;

    -- 1. ADIM: KARAKTER VE AKADEMİ KONTROLÜ
    DECLARE @CharID INT = (SELECT CharID FROM SRO_VT_SHARD.dbo._Char WITH (NOLOCK) WHERE CharName16 = @KillerName)

    IF (@CharID IS NULL OR @CharID = 0)
        RETURN;

    -- Karakterin bir akademisi var mı?
    DECLARE @CampID INT = ISNULL((SELECT CampID FROM SRO_VT_SHARD.dbo._TrainingCampMember WITH (NOLOCK) WHERE CharID = @CharID), 0)

    -- 2. ADIM: UNIQ'E GÖRE VERİLECEK HONOR PUANINI BELİRLE
    DECLARE @HonorPointToAdd INT = 0

    SET @HonorPointToAdd = CASE 
        WHEN @MobID IN (1954, 45853) THEN 2   -- Tiger Girl (INT / STR) -> 2 Puan
        WHEN @MobID IN (1982, 45854) THEN 3   -- Cerberus (INT / STR)   -> 3 Puan
        WHEN @MobID IN (2002, 45855) THEN 4   -- Captain Ivy            -> 4 Puan
        WHEN @MobID IN (3810, 45856) THEN 5   -- Uruchi                 -> 5 Puan
        WHEN @MobID IN (3875, 45857) THEN 7   -- Isyutaru               -> 7 Puan
        WHEN @MobID IN (3877, 45858) THEN 10  -- Lord Yarkan            -> 10 Puan
        WHEN @MobID IN (3882, 45859) THEN 15  -- Demon Shaitan          -> 15 Puan
        WHEN @MobID IN (5879, 45860) THEN 25  -- Medusa                 -> 25 Puan
        ELSE 0 -- Listede olmayan moblar için puan verme
    END

    -- 3. ADIM: EĞER PUAN TANIMLI VE OYUNCUNUN AKADEMİSİ VARSA PUANI YÜKLE
    IF (@HonorPointToAdd > 0 AND @CampID > 0)
    BEGIN
        -- Akademinin genel puanını ve mezuniyet sayacını artır
        UPDATE SRO_VT_SHARD.dbo._TrainingCamp
        SET EvaluationPoint = EvaluationPoint + @HonorPointToAdd,
            GraduateCount   = GraduateCount + @HonorPointToAdd
        WHERE ID = @CampID

        -- Karakterin şahsi Honor puanını artır
        UPDATE SRO_VT_SHARD.dbo._TrainingCampMember
        SET HonorPoint = HonorPoint + @HonorPointToAdd
        WHERE CharID = @CharID
    END

    -- 4. ADIM: LOGGER'IN MEVCUT LOG TABLOLARINA KAYIT (Varsayılan Logger Akışı)
    IF EXISTS (SELECT 1 FROM sys.tables WHERE name = '_UniqueLogger')
    BEGIN
        INSERT INTO dbo._UniqueLogger (CharName, UniqueID, LogDate) 
        VALUES (@KillerName, @MobID, GETDATE())
    END

    -- Varsa ek log prosedürünü çağır
    IF OBJECT_ID('dbo.__Log_EveryThings', 'P') IS NOT NULL
    BEGIN
        EXEC dbo.__Log_EveryThings @MobID, @KillerName
    END
END
GO



Neden Bu Optimize Versiyon Kullanılmalı?

  1. CASE WHEN ile Tek Satırda Puanlama: Onlarca IF...ELSE bloğu yerine CASE yapısı kullanılmıştır. Yeni bir Unique eklemek istediğinizde tek yapmanız gereken listeye WHEN @MobID = MobID THEN Puan satırını eklemektir.
  2. Akademisi Olmayanlar Korundu: @CampID > 0 kontrolü sayesinde akademisi bulunmayan oyuncular Unique kestiğinde veritabanı boş güncellemelerle yorulmaz, Logger kilitlenmesi yaşanmaz.
  3. Performans & Deadlock Koruması: Sorgular WITH (NOLOCK) ile çekildiğinden Unique öldüğü an sunucuda anlık lag veya gecikme (spike) oluşmaz.



Nasıl Uygulanır & Test Edilir?

  1. SQL Server Management Studio (SSMS) programını açın.
  2. Logger sisteminizin bulunduğu veritabanını (Örn: PureLogger) seçin.
  3. Yukarıdaki prosedür kodunu yapıştırın ve CASE bloğundaki Unique ID'leri kendi veritabanınıza göre kontrol edip F5 tuşuna basın.
  4. Oyunda test edeceğiniz karakter ile öncelikle bir **Akademi** kurun.
  5. Test için karakterin yanına Tiger Girl spawn edin ve kesin.
  6. SQL üzerinden SRO_VT_SHARD.._TrainingCampMember tablosunu kontrol ettiğinizde karakterinizin Honor puanının 2 arttığını göreceksiniz.

Sorularınızı ve özel puan listesi ekleme taleplerinizi konu altından paylaşabilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Ş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