- #1
Konu Sahibi
: serkankacan
[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
__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ı?
- CASE WHEN ile Tek Satırda Puanlama: Onlarca
IF...ELSEbloğu yerineCASEyapısı kullanılmıştır. Yeni bir Unique eklemek istediğinizde tek yapmanız gereken listeyeWHEN @MobID = MobID THEN Puansatırını eklemektir. - Akademisi Olmayanlar Korundu:
@CampID > 0kontrolü sayesinde akademisi bulunmayan oyuncular Unique kestiğinde veritabanı boş güncellemelerle yorulmaz, Logger kilitlenmesi yaşanmaz. - 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?
- SQL Server Management Studio (SSMS) programını açın.
- Logger sisteminizin bulunduğu veritabanını (Örn:
PureLogger) seçin. - Yukarıdaki prosedür kodunu yapıştırın ve
CASEbloğundaki Unique ID'leri kendi veritabanınıza göre kontrol edip F5 tuşuna basın. - Oyunda test edeceğiniz karakter ile öncelikle bir **Akademi** kurun.
- Test için karakterin yanına Tiger Girl spawn edin ve kesin.
- SQL üzerinden
SRO_VT_SHARD.._TrainingCampMembertablosunu 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!

