- #1
Konu Sahibi
: serkankacan
[REHBER & SİSTEM] vSRO Skill & Mastery Recall (Skill Sıfırlama) Scroll Sistemi
_AddLogItem Tetikleyicisi Üzerinden Hotbar Temizleme, Mastery Sıfırlama ve Otomatik SP İadesi
_AddLogItem Tetikleyicisi Üzerinden Hotbar Temizleme, Mastery Sıfırlama ve Otomatik SP İadesi
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında oyuncuların build (yapılandırma) değiştirebilmeleri için kullanılan en popüler eşyalardan biri **Skill Recall Scroll** (Yetenek Sıfırlama Parşömeni)'dur.
Aşağıdaki prosedür; oyuncu parşömene sağ tıkladığında karakterin **tüm mastery ağaçlarını 0'a çeker**, temel vuruş haricindeki **tüm yetenekleri temizler**, yetenek çubuğundaki (Hotbar -
_ClientConfig) kısayolları sıfırlar, karaktere belirlediğiniz miktarda **Skill Point (SP) iadesi** yapar ve bellek çakışmasını önlemek için karakteri güvenle oyundan düşürür (DC eder).Önemli Güvenlik Kuralları' Alıntı:DİKKAT:
- Karakter oyundayken yetenek tabloları güncellendiğinde `GameServer` hafızası ile DB senkronizasyonunun kopmaması ve eski skillerin geri gelmemesi için karakter scroll basıldığı anda otomatik DC edilir.
- Temel yumruk/saldırı ID'leri (
SkillID IN (1, 2)) silinmez; böylece karakterin temel animasyonları ve normal vuruşu korunur.- İşlem öncesinde SRO_VT_LOG ve SRO_VT_SHARD yedeklerinizi almayı unutmayınız.
1. ADIM: _SKILL_RECALL Prosedürünü Oluşturma
SRO_VT_LOG veritabanını seçip aşağıdaki ana motor prosedürünü derleyin:
SQL:
USE [SRO_VT_LOG]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE dbo._SKILL_RECALL
@CharID INT
AS
BEGIN
SET NOCOUNT ON;
-- Kontrol: Karakter geçerli mi?
IF NOT EXISTS (SELECT 1 FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @CharID)
RETURN;
-- İade edilecek Skill Point (SP) miktarı (Örn: 5.000.000 SP)
DECLARE @RefundSP INT = 5000000
-- 1. Hotbar / Yetenek Çubuğundaki kısayolları sıfırla (Görsel bugları önler)
UPDATE SRO_VT_SHARD.dbo._ClientConfig
SET Data = 0
WHERE CharID = @CharID
-- 2. Öğrenilmiş tüm skilleri sil (Temel vuruşlar 1 ve 2 hariç)
DELETE FROM SRO_VT_SHARD.dbo._CharSkill
WHERE CharID = @CharID
AND SkillID NOT IN (1, 2)
-- 3. Mastery seviyelerini 0'a çek
UPDATE SRO_VT_SHARD.dbo._CharSkillMastery
SET Level = 0
WHERE CharID = @CharID
-- 4. SP İadesini karaktere tanımla
UPDATE SRO_VT_SHARD.dbo._Char
SET RemainSkillPoint = RemainSkillPoint + @RefundSP
WHERE CharID = @CharID
-- 5. KRİTİK: GameServer bellek eşitliği için karakteri güvenle oyundan düşür (DC)
UPDATE SRO_VT_SHARD.dbo._User
SET Sec_Primary = 1
WHERE CharID = @CharID
END
GO
2. ADIM: _AddLogItem Tetikleyicisine Bağlama
SRO_VT_LOG içerisindeki **_AddLogItem** prosedürünü açarak (
Modify) AS satırının altına tetikleyiciyi ekleyin:
SQL:
-- ===================================================================
-- SKILL RECALL SCROLL TETİKLEYİCİSİ
-- @Operation = 41 (Eşya Kullanımı)
-- 70002 (Skill Recall Scroll RefItemID Değeri)
-- ===================================================================
IF (@Operation = 41 AND @ItemRefID = 70002)
BEGIN
EXEC SRO_VT_LOG.dbo._SKILL_RECALL @CharID
END
Nasıl Test Edilir?
- SQL prosedürünü Management Studio üzerinde çalıştırarak derleyin (F5 / Execute).
70002kodlu Skill Recall parşömenini karakterinize aktarın.- Oyunda parşömene sağ tıklayarak kullanın.
- Karakteriniz anında oyundan düşecektir (Disconnect).
- Oyuna tekrar girdiğinizde;
- Tüm mastery ve skillerinizin sıfırlandığını,
- Skill barınızın temizlendiğini,
- Tanımlanan SP miktarının çantanızdaki SP hanesine eklendiğini göreceksiniz.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli oyunlar ve iyi forumlar!

