- #1
Konu Sahibi
: serkankacan
[REHBER & ANALİZ] vSRO Canavar Drop Grubu (Group Drop) Detaylı Sorgulama
_RefMonster_AssignedItemRndDrop ve _RefDropItemGroup Üzerinden Mob Droplarını Listeleme
_RefMonster_AssignedItemRndDrop ve _RefDropItemGroup Üzerinden Mob Droplarını Listeleme
Merhaba değerli forum sakinleri,
Silkroad Online sunucu geliştirme aşamasında moblara tek tek eşya eklemek yerine toplu drop havuzu sağlayan **Group Drop** sistemi kullanılır.
Hangi canavarda hangi drop grubunun tanımlı olduğunu, bu gruptan minimum/maksimum kaç adet eşya düştüğünü ve **o grubun içinde gerçekte hangi eşyaların (Coin, Sun, Moon, Taş vb.) yer aldığını** tek tek tablolarda kaybolmadan listelemek için aşağıdaki optimize sorguları kullanabilirsiniz.
Teknik Bilgilendirme' Alıntı:
- _RefMonster_AssignedItemRndDrop: Canavar ile Drop Grubu arasındaki bağlantıyı, grubun genel düşme şansını (
DropRatio) ve düşecek paket adedini (DropAmountMin/Max) belirler.- _RefDropItemGroup: İlgili grubun içerisine tanımlanmış olan asıl eşyaları ve bu eşyaların grup içindeki kendi ağırlıklarını (
ItemRatio) barındırır.
1. YÖNTEM: Tam Detaylı Drop Raporu (Grubun İçindeki Eşyalar Dahil - ÖNERİLEN)
Bu sorgu; canavarın adını, seviyesini, bağlı olduğu grubu ve o grubun içinden **fiziksel olarak düşecek eşyaların kodlarını** tek tabloda önünüze serer:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- DETAYLI GROUP DROP LİSTELEME SORGUSU
-- ===================================================================
DECLARE @SearchMobCode VARCHAR(128) = '' -- Boş bırakırsanız TÜM mobları listeler, örn: 'MOB_RM_TAHOMET'
SELECT
ROC_M.ID AS [Mob ID],
ROC_M.CodeName128 AS [Canavar Kodu],
ROCH.Lvl AS [Mob Seviye],
RND.ItemGroupCodeName128 AS [Bagli Drop Grubu],
RND.DropRatio AS [Grup Dusme Orani],
RND.DropAmountMin AS [Min Adet],
RND.DropAmountMax AS [Max Adet],
ROC_I.CodeName128 AS [Gruptan Dusecek Esya Kodu],
DIG.ItemRatio AS [Esyanin Grup Ici Sansi]
FROM dbo._RefObjCommon ROC_M WITH (NOLOCK)
INNER JOIN dbo._RefObjChar ROCH WITH (NOLOCK)
ON ROC_M.Link = ROCH.ID
INNER JOIN dbo._RefMonster_AssignedItemRndDrop RND WITH (NOLOCK)
ON RND.RefMonsterID = ROC_M.ID
LEFT JOIN dbo._RefDropItemGroup DIG WITH (NOLOCK)
ON DIG.ItemGroupCodeName128 = RND.ItemGroupCodeName128
LEFT JOIN dbo._RefObjCommon ROC_I WITH (NOLOCK)
ON ROC_I.ID = DIG.RefItemID
WHERE ROC_M.Service = 1
AND (@SearchMobCode = '' OR ROC_M.CodeName128 LIKE '%' + @SearchMobCode + '%')
ORDER BY
ROC_M.CodeName128 ASC,
DIG.ItemRatio DESC
2. YÖNTEM: Özet Liste (Yalnızca Mob ve Grup Bilgisi)
Grup içindeki tekil eşyalarla ilgilenmeyip yalnızca hangi canavara hangi grubun atandığını genel olarak görmek isterseniz:
SQL:
USE [SRO_VT_SHARD]
GO
SELECT
ROC.ID AS [Mob ID],
ROC.CodeName128 AS [Canavar Kodu],
ROCH.Lvl AS [Seviye],
RND.ItemGroupCodeName128 AS [Drop Grubu],
RND.Overlap AS [Overlap (Ust Uste)],
RND.DropAmountMin AS [Min Adet],
RND.DropAmountMax AS [Max Adet],
RND.DropRatio AS [Düşme Oranı]
FROM dbo._RefObjCommon ROC WITH (NOLOCK)
INNER JOIN dbo._RefObjChar ROCH WITH (NOLOCK)
ON ROC.Link = ROCH.ID
INNER JOIN dbo._RefMonster_AssignedItemRndDrop RND WITH (NOLOCK)
ON RND.RefMonsterID = ROC.ID
WHERE ROC.Service = 1
ORDER BY ROCH.Lvl ASC, ROC.CodeName128 ASC
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.
- Eğer belirli bir canavarı arıyorsanız en üstteki
@SearchMobCode = 'MOB_KODU'alanını doldurun (Tüm listeyi görmek için boş bırakın:''). - F5 tuşuna basarak sorguyu çalıştırın.
- Alt panelde hangi canavardan hangi drop grubunun ve o gruba ait hangi eşyaların düştüğünü tüm oranlarıyla görüntüleyebilirsiniz.
Sorularınızı ve eklemek istediğiniz drop filtrelerini konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

