- #1
Konu Sahibi
: serkankacan
[REHBER & SİSTEM] vSRO Slotlardaki Canavar Doğma Oranını (Mob Spawn Rate) Arttırma
Tab_RefNest Üzerinden Seviye Aralıklarına Göre Mob Sayısını ve Yenilenme Sürelerini Optimize Etme
Tab_RefNest Üzerinden Seviye Aralıklarına Göre Mob Sayısını ve Yenilenme Sürelerini Optimize Etme
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında oyuncuların daha seri ve kalabalık slotlarda kasılabilmesi (Grinding/Leveling) için haritadaki canavar doğma adetlerini (**dwMaxTotalCount**) ve canavarlar kesildikten sonra yeniden çıkma sürelerini (**dwDelayTime**) seviye aralıklarına göre düzenleyebilirsiniz.
Aşağıda hem mob sayısını güvenli bir çarpanla katlayan hem de aşırı yığılmayı önleyen optimize edilmiş SQL sorgularını bulabilirsiniz.
Kritik Performans Uyarısı' Alıntı:DİKKAT (GameServer Yükü & Slot Dengesi):
- Yuvalardaki mob adetlerini kontrolsüz şekilde (örneğin 20-30 gibi) artırmak GameServer RAM ve CPU kullanımını aşırı yükselterek gecikmeye (lag) ve çökmelere neden olabilir. Önerilen maksimum yuva başı sınır 5 ile 10 arasıdır.
- Sorgu yalnızca standart canavarları (
Rarity = 0) hedefler; Unique, Champion ve Titan mobların dengesini bozmaz.- Değişikliklerin oyuna yansıması için işlem sonrası GameServer modüllerinin yeniden başlatılması (Restart) gerekmektedir.
- İşlem öncesinde SRO_VT_SHARD yedeğinizi almayı unutmayınız.
1. YÖNTEM: Katlama / Çarpan Yöntemi (ÖNERİLEN)
Her slotun kendi orijinal büyüklüğünü koruyarak mob sayısını belirlediğiniz bir katsayı ile çarpar (Örn: 2 katına çıkarır ve maksimum 8 ile sınırlar):
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- AYARLAR
-- ===================================================================
DECLARE @MinLevel INT = 1 -- Düzenlenecek Taban Seviye
DECLARE @MaxLevel INT = 90 -- Düzenlenecek Tavan Seviye
DECLARE @Multiplier INT = 2 -- Mevcut sayıyı kaç ile çarpmak istiyorsunuz? (Örn: 2 katı)
DECLARE @MaxAllowedCap INT = 8 -- Tek bir yuvada çıkabilecek MAKSİMUM mob sınırı (Aşırı lagı önler)
-- ===================================================================
-- SPAWN GÜNCELLEME SORGUSU
-- ===================================================================
UPDATE A
SET
-- Sayıyı katla, belirlenen üst sınırı aşarsa sınıra sabitle
A.dwMaxTotalCount = CASE
WHEN (A.dwMaxTotalCount * @Multiplier) > @MaxAllowedCap THEN @MaxAllowedCap
ELSE (A.dwMaxTotalCount * @Multiplier)
END,
-- Canavarlar kesildikten sonra yeniden doğma süresini kısalt (Örn: Min 2 sn, Max 5 sn)
A.dwDelayTimeMin = 2,
A.dwDelayTimeMax = 5
FROM dbo.Tab_RefNest A
INNER JOIN dbo.Tab_RefTactics B ON A.dwTacticsID = B.dwTacticsID
INNER JOIN dbo._RefObjCommon C ON B.dwObjID = C.ID
INNER JOIN dbo._RefObjChar D ON C.Link = D.ID
INNER JOIN dbo._RefRegion R ON A.nRegionDBID = R.wRegionID
WHERE D.Lvl BETWEEN @MinLevel AND @MaxLevel
AND C.CodeName128 LIKE 'MOB_%'
AND C.CodeName128 NOT LIKE 'MOB_GOD_%' -- Özel etkinlik/zindan moblarını hariç tut
AND R.ContinentName NOT LIKE 'GOD_TOGUI' -- Togui zindanını hariç tut
AND C.Rarity = 0 -- Yalnızca normal kasılma mobları (Unique/Elite hariç)
AND A.dwMaxTotalCount > 0
PRINT '====================================================='
PRINT 'BAŞARILI: ' + CAST(@MinLevel AS VARCHAR(3)) + ' - ' + CAST(@MaxLevel AS VARCHAR(3)) + ' seviye arası mob rate başarıyla arttırıldı!'
PRINT 'Değişikliğin aktif olması için GameServer yeniden başlatılmalıdır.'
PRINT '====================================================='
2. YÖNTEM: Sabit Sayı Atama Yöntemi
Belirlediğiniz seviye aralığındaki tüm yuvalara istisnasız sabit bir adet (Örn: Her yuvada tam **6 adet** mob) atamak isterseniz:
SQL:
USE [SRO_VT_SHARD]
GO
DECLARE @MinLevel INT = 80
DECLARE @MaxLevel INT = 90
DECLARE @FixedSpawnCount INT = 6 -- Her yuvaya atanacak sabit canavar adedi
UPDATE A
SET
A.dwMaxTotalCount = @FixedSpawnCount,
A.dwDelayTimeMin = 3,
A.dwDelayTimeMax = 6
FROM dbo.Tab_RefNest A
INNER JOIN dbo.Tab_RefTactics B ON A.dwTacticsID = B.dwTacticsID
INNER JOIN dbo._RefObjCommon C ON B.dwObjID = C.ID
INNER JOIN dbo._RefObjChar D ON C.Link = D.ID
WHERE D.Lvl BETWEEN @MinLevel AND @MaxLevel
AND C.CodeName128 LIKE 'MOB_%'
AND C.Rarity = 0
AND A.dwMaxTotalCount > 0
PRINT 'Belirtilen seviyedeki mobların yuva adedi ' + CAST(@FixedSpawnCount AS VARCHAR(3)) + ' olarak sabitlendi.'
Nasıl Uygulanır?
- SQL Server Management Studio (SSMS) programını açın.
- Üst panelden New Query penceresi açıp yukarıdaki 1. Yöntem kodunu yapıştırın.
- En üstteki
@MinLevel,@MaxLevelve@Multiplierdeğerlerini sunucunuzun ihtiyacına göre belirleyin. - F5 tuşuna basarak çalıştırın.
- Sunucunuzdaki GameServer pencerelerini yeniden başlatın.
- Oyuna girerek ilgili haritadaki slot yoğunluğunu ve yeniden doğma hızını test edin.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

