- #1
Konu Sahibi
: serkankacan
[REHBER & QUERY] vSRO Mob / Slot Değiştirme (Spawn Dönüştürme)
Tab_RefTactics Üzerinden Haritadaki Herhangi Bir Canavar Slotunu Başka Bir Yaratığa Çevirme
Tab_RefTactics Üzerinden Haritadaki Herhangi Bir Canavar Slotunu Başka Bir Yaratığa Çevirme
Merhaba değerli forum sakinleri,
Sunucunuzda mevcut bir slotta çıkan canavarları (örneğin Jangan Mangyang slotlarını Wing Tribe yapmak veya Samarkand slotlarına özel event mobları yerleştirmek) haritayı baştan çizmeden, hazır nest ve hive düzenini bozmadan tek bir sorguyla farklı bir canavara dönüştürebilirsiniz.
İnternette dolaşan `REPLACE` ve `LIKE` kullanılan eski sorgular, sayı benzerliğinden dolayı (örn: ID `12` değişirken `120`, `212` gibi alakasız mobların da bozulması) sunucunun çökmesine sebep olabilir. Aşağıda hem güvenli ID kontrolü yapan hem de doğrudan mob kod adıyla (
CodeName128) çalışan hatasız optimize sorguyu paylaşıyoruz.Önemli Uyarı' Alıntı:DİKKAT:
- Bu işlem haritadaki mevcut koordinatları (
Tab_RefNest) ve doğma gruplarını (Tab_RefHive) korur; sadece çıkan canavarın model/kimlik referansını değiştirir.- Değişikliklerin oyuna yansıması için işlem bittikten sonra GameServer modüllerinin yeniden başlatılması (Restart) gerekmektedir.
- İşlem öncesinde mutlaka SRO_VT_SHARD yedeğinizi alınız.
1. YÖNTEM: Mob Kod Adı (CodeName128) ile Değiştirme (ÖNERİLEN)
ID aramakla uğraşmadan, doğrudan `_RefObjCommon` tablosundaki yaratık kodlarını girerek tüm slotları dönüştürebilirsiniz:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- DEĞİŞKENLER
-- ===================================================================
DECLARE @EskiMobCode VARCHAR(128) = 'MOB_CH_MANGYANG' -- Slottan kaldırılacak mobun kodu
DECLARE @YeniMobCode VARCHAR(128) = 'MOB_CH_ARCHER' -- Slota yerleştirilecek yeni mobun kodu
-- ID Değerlerini Otomatik Çekiyoruz
DECLARE @EskiMobID INT = (SELECT ID FROM dbo._RefObjCommon WHERE CodeName128 = @EskiMobCode)
DECLARE @YeniMobID INT = (SELECT ID FROM dbo._RefObjCommon WHERE CodeName128 = @YeniMobCode)
-- Kontrol
IF (@EskiMobID IS NULL OR @YeniMobID IS NULL)
BEGIN
RAISERROR('HATA: Belirtilen canavar kodlarından biri veya ikisi veritabanında bulunamadı!', 16, 1)
RETURN
END
-- ===================================================================
-- GÜNCELLEME İŞLEMİ (Doğrudan Sayısal Eşitleme - Güvenli)
-- ===================================================================
UPDATE dbo.Tab_RefTactics
SET dwObjID = @YeniMobID
WHERE dwObjID = @EskiMobID
PRINT '====================================================='
PRINT 'BAŞARILI: ' + @EskiMobCode + ' slotları ' + @YeniMobCode + ' olarak güncellendi!'
PRINT 'Eski Mob ID: ' + CAST(@EskiMobID AS VARCHAR(10)) + ' -> Yeni Mob ID: ' + CAST(@YeniMobID AS VARCHAR(10))
PRINT '====================================================='
2. YÖNTEM: Doğrudan Sayısal ID ile Değiştirme
Eğer elinizde canavarların `_RefObjCommon.ID` değerleri zaten hazırsa, tek satırda en güvenli güncelleme biçimi:
SQL:
USE [SRO_VT_SHARD]
GO
DECLARE @EskiID INT = 1934 -- Eski Mobun ID numarası (Sayısal)
DECLARE @YeniID INT = 1935 -- Yeni Mobun ID numarası (Sayısal)
UPDATE dbo.Tab_RefTactics
SET dwObjID = @YeniID
WHERE dwObjID = @EskiID
Nasıl Uygulanır?
- SQL Server Management Studio (SSMS) programını açın.
- Üst kısımdan New Query penceresi açın.
- Yukarıdaki 1. Yöntemdeki SQL sorgusunu yapıştırın.
@EskiMobCodeve@YeniMobCodealanlarını kendi hedefinize göre doldurun.- F5 tuşuna basarak çalıştırın.
- Sunucunuzdaki GameServer modüllerini yeniden başlatın.
- Oyuna girip ilgili bölgeye giderek yeni mobların sorunsuzca doğduğunu doğrulayın.
Sorularınızı ve takıldığınız yerleri bu konu altından paylaşabilirsiniz. Herkese iyi forumlar ve kolay gelsin!

