- #1
Konu Sahibi
: serkankacan
[REHBER & ANALİZ] vSRO NPC Eşya Alış ve Satış Fiyatlarını Görüntüleme
_RefObjCommon ve _RefObjItem Üzerinden Kervan Malları ve Özel Eşyaların Fiyatlarını Doğru Listeleme
_RefObjCommon ve _RefObjItem Üzerinden Kervan Malları ve Özel Eşyaların Fiyatlarını Doğru Listeleme
Merhaba değerli forum sakinleri,
Silkroad Online sunucularınızda kervan kâr oranlarını hesaplarken, NPC'lerde satılan özel eşyaları kontrol ederken veya ekonomi dengesini kurarken eşyaların **NPC Alış (Price)** ve **NPC'ye Satış (SellPrice)** değerlerini tek bir raporda listelemek isteyebilirsiniz.
Silkroad mimarisinde fiyatlar çoğunlukla `_RefObjCommon` yerine fiziksel özelliklerin tutulduğu **`_RefObjItem`** tablosundan okunur. Aşağıda hem mantık hatalarından arındırılmış optimize sorguyu hem de fiyatları tek seferde güncelleyebileceğiniz hazır yapıyı bulabilirsiniz.
Teknik Bilgilendirme (Fiyat Mantığı)' Alıntı:
- Price (_RefObjItem.Price): Oyuncunun eşyayı NPC'den satın alırken ödediği alış fiyatıdır.
- SellPrice (_RefObjItem.SellPrice): Oyuncunun eşyayı NPC'ye geri sattığında elde ettiği satış fiyatıdır.
- Kervan Malları: Kervan mallarının kâr oranı bu iki fiyat arasındaki çarpan üzerinden hesaplanır.
1. YÖNTEM: Kervan Malları ve Özel NPC Eşyalarının Fiyatlarını Listeleme (ÖNERİLEN)
Bu sorgu, `_RefObjItem` tablosunu doğru bağlayarak gerçek satış ve alış rakamlarını listeler:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- KERVAN MALLARI VE NPC EŞYALARI ALIŞ - SATIŞ LİSTESİ
-- ===================================================================
SELECT
ROC.ID AS [RefItemID],
ROC.CodeName128 AS [Esya Kodu],
ROI.Price AS [NPC Alis Fiyati (Gold)],
ROI.SellPrice AS [NPC Satis Fiyati (Gold)],
(ROI.SellPrice - ROI.Price) AS [Birim Kar (Fark)],
ROI.MaxStack AS [Max Stack],
ROC.Service AS [Durum (1: Aktif)]
FROM dbo._RefObjCommon ROC WITH (NOLOCK)
INNER JOIN dbo._RefObjItem ROI WITH (NOLOCK)
ON ROC.Link = ROI.ID
WHERE ROC.Service = 1
AND (
ROC.CodeName128 LIKE '%ITEM_ETC_TRADE_%'
OR ROC.CodeName128 LIKE '%TRADE_SPECIAL%'
)
ORDER BY ROC.ID ASC
2. YÖNTEM: Tek Bir Eşyanın veya Belirli Bir Kodun Fiyatını Arama
Belirlediğiniz spesifik bir eşyanın fiyatını incelemek isterseniz:
SQL:
USE [SRO_VT_SHARD]
GO
DECLARE @SearchCode VARCHAR(128) = 'ITEM_ETC_TRADE%' -- Aramak istediğiniz eşya veya desen
SELECT
ROC.ID AS [RefItemID],
ROC.CodeName128 AS [Esya Kodu],
ROI.Price AS [Alis Fiyati],
ROI.SellPrice AS [Satis Fiyati]
FROM dbo._RefObjCommon ROC WITH (NOLOCK)
INNER JOIN dbo._RefObjItem ROI WITH (NOLOCK)
ON ROC.Link = ROI.ID
WHERE ROC.CodeName128 LIKE @SearchCode
ORDER BY ROC.ID ASC
Nasıl Uygulanır?
- SQL Server Management Studio (SSMS) programını açın.
- Üst menüden New Query butonuna tıklayın.
- Yukarıdaki 1. Yöntem kodunu yapıştırın.
- F5 tuşuna basarak çalıştırın.
- Alt panelde tüm kervan eşyalarının alış, satış ve birim kâr değerlerini net olarak görebilirsiniz.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

