Silkroad private serverlerinin neredeyse hepsinin sorunlarından birisi olan SR_GameServer isimli files dosyasının aşırı yükten dolayı kapanması ve serverlerin check durumuna gelmesidir.
Bu sorunların en baş sebebi olarak aşağıdaki görselde ek olarak gösterdiğim Obj Count seviyesidir.
Obj Count seviyesi Max. 45000 olması gerekmektedir, aksi taktirde Mob, Pet kaybolmaları ve GameServer dosyamızın kapanması kaçınılmaz olur.
GameServer Örnek görsel;

GameServer dosyalarında sorun yaşamamak için Obj Count seviyesi nasıl ayarlanmalıdır? ;
1. Mob Rate'leri Ayarlanır.
2. Files Dosyaları 3x-5x olarak çoğaltılarak yük paylaşımı yapılır.
3. İtemlerin yerde bekleme süreleri azaltılır.
4. Gereksiz droplar kapatılır, temizlenir.
Çözümler ve Uygulamaları;
1. Öncelikle Mob Rate ayarlama bölümü dikkat istemektedir. Aşşağıda Belirtilen Proc içerisinde detay vererek paylaşıyorum. (Bu konu haricinde ekstra bir konuda detaylıca anlatım yapacağım.)
Proc;
USE SRO_VT_SHARD
declare @minLv int = 61 -- Düzenlenmesi gereken En düşük mob leveli
declare @MaxLv int = 80 -- Düzenlenmesi gereken En yüksek mob leveli
declare @MaxSpawn int = 4 -- Max 6-7 olacak şekilde mob spawn ratesi ayarlanabilir.
declare @respawnTimeMin int = 1 -- Mob öldükten minimum kaç saniye sonrasında tekrar spawn olması gerektiği.
declare @respawnTimeMax int = 2 -- Mob öldükten maximum kaç saniye sonrasında tekrar spawn olması gerektiği.
if (@MaxSpawn < 1 or @MaxSpawn > 7)
print '1''den küçük yada 7''den büyük spawn sayıları kararsız sonuçlar doğurabilir.'
else if (@respawnTimeMin < 1)
print '1''den küçük saniyede respawn kararsız sonuçlara neden olabilir.'
else if (@respawnTimeMin >= @respawnTimeMax)
print 'RespawnTimeMin, RespawnTimeMax değerine eşit yada bu değerden büyük olamaz.'
else if (@minLv > @MaxLv)
print 'MinLv MaxLv''den büyük olamaz.'
else
begin
--select D.*
update D set dwDelayTimeMin = @respawnTimeMin, dwDelayTimeMax = @respawnTimeMax, dwMaxTotalCount = @MaxSpawn
from _RefObjCommon as A
inner join _RefObjChar as B on A.Link = B.ID and A.CodeName128 like 'MOB%' and A.Rarity = 0 and B.Lvl between @minLv and @MaxLv
inner join Tab_RefTactics as C on C.dwObjID = A.ID
inner join Tab_RefNest as D on D.dwTacticsID = C.dwTacticsID and D.dwMaxTotalCount > 0 and D.dwDelayTimeMin > 0
end
2. Files Dosyalarını Çoğaltmak ve GameServer sayısını arttırmak. (Bu konu haricinde ekstra bir konuda detaylıca anlatım yapacağım.)
3. İtemlerin yerde bekleme sürelerini düzenlemek için sizler için hazırladığım kısa proc'u paylaşıyorum.;
Proc:
Aşağıda belirtilen query de '(Tırnak içerisine sürelerini değiştirmek istediğin item ve itemlerin CodeName128)' isimlerini yazarak veya toplu sorgular için kesişme bölümlerinde % işaretini kullanabilirisiniz. Kesişme Örnek; 'ITEM_ETC_GOLD_01' yerine 'ITEM_ETC_GOLD_%' yaparaktan 01-02 ve 03 ü aynı kesişmede birleştirebilirsiniz.'
Öncelikle çoğu sunucularımda GOLD ve değersiz olan item, pot, reserse gibi itemlerin sürelerini kısmakta kullanıyorum, Yerde bekleyen item her zaman sunucularınıza yük bindirecektir.
Toplu sorgularda kontrolsüz işlem sorun yaratabilir.
Örnek; Trader itemlerinin kervan yıkıldıktan sonra yerde bekleme süresinin değişmesi gibi vs.
Bu sorunlarla karşılaşmamak için refobjcommon tablonuzda mümkünse tek tek kontrol ile müdahale etmenizdir.
DecayTime bölümü, mili saniye olarak hesaplanır, Şuanki süre 30 Saniyedir. Orjinal 180 Saniyedir fakat bu seviyenin fazla düşürülmemesi ve yerde bekleme süresini hesaplayarak düzenlenmesi gerekmektedir. Sunucularımda 30 Saniye olarak kullanıyorum.
Sorgu;
UPDATE _RefObjCommon set DecayTime='30000' WHERE CodeName128 like 'Refobjcommon-CodeName128' -- 'işaretleri içerisine CodeName128 bölümündeki itemin kodu yazılmalıdır.
4. Gereksiz çöp itemleri droptan kaldırmak için sorgu;
Proc;
-- Pot, return scroll, arrow & bolt drop
UPDATE DIA SET DIA.Service=0 FROM _RefDropItemAssign DIA
INNER JOIN _RefObjCommon M ON DIA.RefItemID=M.ID AND M.Service=1
INNER JOIN _RefObjItem I ON M.Link=I.ID
WHERE M.CodeName128 LIKE 'ITEM_ETC%' AND M.CodeName128 NOT LIKE 'ITEM_ETC_ARCHEMY%'
-- Material drop
TRUNCATE TABLE _RefMonster_AssignedItemDrop
Herkese başarılar.
Bu sorunların en baş sebebi olarak aşağıdaki görselde ek olarak gösterdiğim Obj Count seviyesidir.
Obj Count seviyesi Max. 45000 olması gerekmektedir, aksi taktirde Mob, Pet kaybolmaları ve GameServer dosyamızın kapanması kaçınılmaz olur.
GameServer Örnek görsel;

GameServer dosyalarında sorun yaşamamak için Obj Count seviyesi nasıl ayarlanmalıdır? ;
1. Mob Rate'leri Ayarlanır.
2. Files Dosyaları 3x-5x olarak çoğaltılarak yük paylaşımı yapılır.
3. İtemlerin yerde bekleme süreleri azaltılır.
4. Gereksiz droplar kapatılır, temizlenir.
Çözümler ve Uygulamaları;
1. Öncelikle Mob Rate ayarlama bölümü dikkat istemektedir. Aşşağıda Belirtilen Proc içerisinde detay vererek paylaşıyorum. (Bu konu haricinde ekstra bir konuda detaylıca anlatım yapacağım.)
Proc;
USE SRO_VT_SHARD
declare @minLv int = 61 -- Düzenlenmesi gereken En düşük mob leveli
declare @MaxLv int = 80 -- Düzenlenmesi gereken En yüksek mob leveli
declare @MaxSpawn int = 4 -- Max 6-7 olacak şekilde mob spawn ratesi ayarlanabilir.
declare @respawnTimeMin int = 1 -- Mob öldükten minimum kaç saniye sonrasında tekrar spawn olması gerektiği.
declare @respawnTimeMax int = 2 -- Mob öldükten maximum kaç saniye sonrasında tekrar spawn olması gerektiği.
if (@MaxSpawn < 1 or @MaxSpawn > 7)
print '1''den küçük yada 7''den büyük spawn sayıları kararsız sonuçlar doğurabilir.'
else if (@respawnTimeMin < 1)
print '1''den küçük saniyede respawn kararsız sonuçlara neden olabilir.'
else if (@respawnTimeMin >= @respawnTimeMax)
print 'RespawnTimeMin, RespawnTimeMax değerine eşit yada bu değerden büyük olamaz.'
else if (@minLv > @MaxLv)
print 'MinLv MaxLv''den büyük olamaz.'
else
begin
--select D.*
update D set dwDelayTimeMin = @respawnTimeMin, dwDelayTimeMax = @respawnTimeMax, dwMaxTotalCount = @MaxSpawn
from _RefObjCommon as A
inner join _RefObjChar as B on A.Link = B.ID and A.CodeName128 like 'MOB%' and A.Rarity = 0 and B.Lvl between @minLv and @MaxLv
inner join Tab_RefTactics as C on C.dwObjID = A.ID
inner join Tab_RefNest as D on D.dwTacticsID = C.dwTacticsID and D.dwMaxTotalCount > 0 and D.dwDelayTimeMin > 0
end
2. Files Dosyalarını Çoğaltmak ve GameServer sayısını arttırmak. (Bu konu haricinde ekstra bir konuda detaylıca anlatım yapacağım.)
3. İtemlerin yerde bekleme sürelerini düzenlemek için sizler için hazırladığım kısa proc'u paylaşıyorum.;
Proc:
Aşağıda belirtilen query de '(Tırnak içerisine sürelerini değiştirmek istediğin item ve itemlerin CodeName128)' isimlerini yazarak veya toplu sorgular için kesişme bölümlerinde % işaretini kullanabilirisiniz. Kesişme Örnek; 'ITEM_ETC_GOLD_01' yerine 'ITEM_ETC_GOLD_%' yaparaktan 01-02 ve 03 ü aynı kesişmede birleştirebilirsiniz.'
Öncelikle çoğu sunucularımda GOLD ve değersiz olan item, pot, reserse gibi itemlerin sürelerini kısmakta kullanıyorum, Yerde bekleyen item her zaman sunucularınıza yük bindirecektir.
Toplu sorgularda kontrolsüz işlem sorun yaratabilir.
Örnek; Trader itemlerinin kervan yıkıldıktan sonra yerde bekleme süresinin değişmesi gibi vs.
Bu sorunlarla karşılaşmamak için refobjcommon tablonuzda mümkünse tek tek kontrol ile müdahale etmenizdir.
DecayTime bölümü, mili saniye olarak hesaplanır, Şuanki süre 30 Saniyedir. Orjinal 180 Saniyedir fakat bu seviyenin fazla düşürülmemesi ve yerde bekleme süresini hesaplayarak düzenlenmesi gerekmektedir. Sunucularımda 30 Saniye olarak kullanıyorum.
Sorgu;
UPDATE _RefObjCommon set DecayTime='30000' WHERE CodeName128 like 'Refobjcommon-CodeName128' -- 'işaretleri içerisine CodeName128 bölümündeki itemin kodu yazılmalıdır.
4. Gereksiz çöp itemleri droptan kaldırmak için sorgu;
Proc;
-- Pot, return scroll, arrow & bolt drop
UPDATE DIA SET DIA.Service=0 FROM _RefDropItemAssign DIA
INNER JOIN _RefObjCommon M ON DIA.RefItemID=M.ID AND M.Service=1
INNER JOIN _RefObjItem I ON M.Link=I.ID
WHERE M.CodeName128 LIKE 'ITEM_ETC%' AND M.CodeName128 NOT LIKE 'ITEM_ETC_ARCHEMY%'
-- Material drop
TRUNCATE TABLE _RefMonster_AssignedItemDrop
Herkese başarılar.


