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

vSro Paylaşım vSRO F1 Tuşu Donma ve Rehber Görevi Bug Fix (Alternatif Çözüm)

Cevaplar0
Görüntüleme3
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[GÜVENLİK & FIX] vSRO F1 Tuşu Donma ve Rehber Görevi Bug Fix (Alternatif Çözüm)
_RefCharDefault_Quest (QEVENT_GUIDE) Servisini Aktif Etme ve _CharQuest Tablosunu Güvenle Eşitleme



Merhaba değerli forum sakinleri,

Silkroad Online sunucularında oyuncuların oyuna ilk girdiğinde veya klavyeden **F1** tuşuna bastığında istemcinin (Client) kilitlenmesi ya da arayüzün (UI) donması sorunu için ilk paylaşılan yöntemlere alternatif olarak, doğrudan varsayılan rehber servisinin (QEVENT_GUIDE) aktif edilmesi yöntemi de sıklıkla kullanılır.

İlk kurulumlarda _RefCharDefault_Quest tablosundaki QEVENT_GUIDE satırı kapalı (Service = 0) geldiğinde, istemci rehber arayüzünü yükleyemez ve F1 yuvaları kilitlenir.

İnternetteki eski sorgularda WHERE NOT EXISTS alt sorgusu dış tabloya bağlanmadığı için sorgu ilk karakterden sonra durmakta ve diğer oyuncuları güncellememektedir. Aşağıda bu hatadan arındırılmış, hem mevcut oyuncuları düzelten hem de yeni açılacak karakterleri sağlama alan optimize şablonu paylaşıyoruz.

Teknik Bilgilendirme' Alıntı:
DİKKAT:
  • Service = 1 Yapılan Görev: QEVENT_GUIDE (Rehber / Kılavuz Olayı).
  • Status = 5 (Completed): Rehber görevini tamamlandı olarak işaretlemek, istemcinin görevi tekrar tetikleyip arayüzü kilitlemesini kesin olarak engeller.
  • Referans tablosundaki değişikliğin sunucuya yansıması için işlem sonrası GameServer pencerelerinin yeniden başlatılması şarttır.
  • İşlem öncesinde SRO_VT_SHARD yedeğinizi almayı unutmayınız.



Hatasız & Tek Tıkla Çalışan SQL Fix Sorgusu

SRO_VT_SHARD
veritabanını seçip aşağıdaki optimize bloğu çalıştırın:

SQL:
USE [SRO_VT_SHARD]
GO

-- ===================================================================
-- 1. ADIM: _RefCharDefault_Quest TABLOSUNDA QEVENT_GUIDE SERVİSİNİ AÇ
-- ===================================================================
UPDATE dbo._RefCharDefault_Quest
SET Service = 1
WHERE CodeName128 = 'QEVENT_GUIDE'

-- ===================================================================
-- 2. ADIM: MEVCUT VE EKSİK KARAKTERLERİN QUEST KAYDINI GÜNCELLE
-- Status = 5 (Tamamlandı - İstemci kilitlenmesini önleyen kesin bayrak)
-- ===================================================================

-- Önce varsa QuestID = 1 olan bozuk/eksik kayıtları temizle
DELETE FROM dbo._CharQuest 
WHERE QuestID = 1

-- Tüm mevcut karakterlere tamamlanmış kılavuz kaydını ekle
INSERT INTO dbo._CharQuest (
    CharID, 
    QuestID, 
    [Status], 
    AchievementCount, 
    StartTime, 
    EndTime, 
    QuestData1, 
    QuestData2
)
SELECT 
    C.CharID,
    1,
    5,              -- 5: Completed (Görev bittiği için F1 kilitlenmez)
    0,
    GETDATE() - 1,
    GETDATE() - 1,
    31458135,       -- Rehber adımlarının tamamlandığını belirten veri
    0
FROM dbo._Char C WITH (NOLOCK)
WHERE C.CharID > 0
  -- Korelasyonlu alt sorgu: Yalnızca kaydı eksik olan karakterleri hedefler
  AND NOT EXISTS (
      SELECT 1 
      FROM dbo._CharQuest CQ WITH (NOLOCK) 
      WHERE CQ.CharID = C.CharID 
        AND CQ.QuestID = 1
  )

PRINT '====================================================='
PRINT 'BAŞARILI: QEVENT_GUIDE servisi açıldı ve karakterlerin görev kayıtları onarıldı!'
PRINT 'Değişikliklerin aktif olması için GameServer yeniden başlatılmalıdır.'
PRINT '====================================================='



Neden Bu Optimize Versiyon Kullanılmalı?

  1. Korelasyonlu Alt Sorgu Düzeltildi: Eski koddaki `WHERE NOT EXISTS (SELECT ... WHERE QuestID = 1)` mantık hatası giderildi; `CQ.CharID = C.CharID` bağı kurularak sunucudaki istisnasız tüm aktif karakterlerin sırayla eklenmesi sağlandı.
  2. Status = 5 Güvencesi: Görev durumu `Status = 1` (devam ediyor) yerine `Status = 5` (tamamlandı) yapıldı. Böylece istemci oyun açılışında rehber penceresini sıfırdan çizmeye çalışıp donmaz.
  3. Tek Kodla Çözüm: `_RefCharDefault_Quest` tablosunu elle açıp satır arama derdi olmadan SQL komutuyla doğrudan `QEVENT_GUIDE` satırı `1` yapılır.



Nasıl Uygulanır & Test Edilir?

  1. SQL Server Management Studio (SSMS) programını açın.
  2. Üst panelden New Query penceresi açıp yukarıdaki SQL kodunu yapıştırın.
  3. F5 tuşuna basarak sorguyu çalıştırın.
  4. Sunucunuzdaki GameServer pencerelerini kapatıp yeniden açın.
  5. Karakterinizle oyuna giriş yapın ve klavyeden art arda **F1** tuşuna basın.
  6. Arayüzün donmadığını, client'ın masaüstüne çökmediğini ve sorunsuz şekilde çalıştığını doğrulayın.

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

Konuyu görüntüleyenler

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