- #1
Konu Sahibi
: serkankacan
[REHBER & QUERY] vSRO NPC Eşya Alış ve Satış Fiyatlarını Toplu Değiştirme
_RefPricePolicyOfItem ve _RefObjItem Üzerinden NPC Satın Alma Maliyeti ile Geri Satış Fiyatını Güncelleme
_RefPricePolicyOfItem ve _RefObjItem Üzerinden NPC Satın Alma Maliyeti ile Geri Satış Fiyatını Güncelleme
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında NPC'de satılan eşyaların (Avatar, Elixir, Stone, Kervan Malları, Potlar vb.) fiyatlarını tek tek düzenlemek yerine tek bir SQL sorgusuyla topluca güncellemek isteyebilirsiniz.
Silkroad fiyatlandırma mimarisinde iki ayrı mekanizma çalışır:
- NPC'den Satın Alma Bedeli (_RefPricePolicyOfItem): Oyuncunun NPC'deki paketi alırken ödediği tutar (
Cost) ve para birimidir (PaymentDevice). - NPC'ye Geri Satış Fiyatı (_RefObjItem): Oyuncunun eşyayı NPC penceresine sürükleyip sattığında kazandığı Gold miktarıdır (
SellPrice).
Aşağıda hem paket alış bedellerini (Gold, Silk, Coin) hem de geri satış fiyatlarını güvenle güncelleyebileceğiniz optimize sorguları paylaşıyoruz.
Teknik Bilgilendirme (PaymentDevice Kodları)' Alıntı:_RefPricePolicyOfItem.PaymentDevicesütunundaki değerlerin karşılıkları:
- 1: Normal Oyun Altını (Gold)
- 2: Normal Silk
- 4: Hediye / Point Silk (Gift Silk)
- 16 - 32 - 64: Arena Coin, Copper/Silver/Gold/Iron Coin kombinasyonları (Özel Coin Sistemleri)
1. ADIM: Mevcut Fiyatları Kontrol Etme (Analiz Sorgusu)
Düzenleme yapmadan önce belirlediğiniz eşya grubunun güncel fiyatlarını listelemek için:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- MEVCUT ALIŞ VE SATIŞ FİYATLARINI LİSTELEME
-- ===================================================================
SELECT
PPI.RefPackageItemCodeName AS [Paket Kodu],
PPI.PaymentDevice AS [Para Birimi (1: Gold, 2: Silk)],
PPI.Cost AS [NPC Alis Fiyati (Maliyet)],
ROI.Price AS [Item Taban Fiyati],
ROI.SellPrice AS [NPC'ye Geri Satis Fiyati]
FROM dbo._RefPricePolicyOfItem PPI WITH (NOLOCK)
INNER JOIN dbo._RefPackageItem PI WITH (NOLOCK)
ON PPI.RefPackageItemCodeName = PI.CodeName128
INNER JOIN dbo._RefObjCommon ROC WITH (NOLOCK)
ON PI.RefItemCodeName = ROC.CodeName128
INNER JOIN dbo._RefObjItem ROI WITH (NOLOCK)
ON ROC.Link = ROI.ID
WHERE PPI.Service = 1
AND PPI.RefPackageItemCodeName LIKE 'PACKAGE_ITEM_MALL_AVATAR%' -- Hedef Paket Grubu
2. ADIM: NPC Alış Fiyatını (Maliyet) Toplu Güncelleme
Aşağıdaki sorgu ile seçtiğiniz grubun satın alma para birimini (Örn: Gold) ve maliyetini (Örn: 50.000.000 Gold) güncelleyebilirsiniz:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- NPC ALIŞ BEDELİ GÜNCELLEME (_RefPricePolicyOfItem)
-- ===================================================================
DECLARE @NewCost BIGINT = 50000000 -- Yeni Alış Fiyatı (Örn: 50M Gold)
DECLARE @CurrencyType INT = 1 -- Para Birimi (1: Gold, 2: Silk)
UPDATE dbo._RefPricePolicyOfItem
SET
PaymentDevice = @CurrencyType,
Cost = @NewCost
WHERE Service = 1
AND RefPackageItemCodeName LIKE 'PACKAGE_ITEM_MALL_AVATAR%'
PRINT '====================================================='
PRINT 'BAŞARILI: Seçilen paketlerin NPC alış bedeli ' + CAST(@NewCost AS VARCHAR(20)) + ' olarak güncellendi!'
PRINT '====================================================='
3. ADIM: NPC'ye Geri Satış (SellPrice) Fiyatını Toplu Güncelleme
Oyuncuların eşyayı NPC'ye geri sattıklarında alacakları Gold miktarını belirlemek için:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- NPC'YE GERİ SATIŞ FİYATI GÜNCELLEME (_RefObjItem.SellPrice)
-- ===================================================================
DECLARE @NewSellPrice BIGINT = 1 -- Eşya geri satıldığında verilecek Gold (Örn: 1 Gold)
UPDATE ROI
SET ROI.SellPrice = @NewSellPrice
FROM dbo._RefObjItem ROI
INNER JOIN dbo._RefObjCommon ROC ON ROC.Link = ROI.ID
INNER JOIN dbo._RefPackageItem PI ON PI.RefItemCodeName = ROC.CodeName128
WHERE PI.CodeName128 LIKE 'PACKAGE_ITEM_MALL_AVATAR%'
PRINT 'Seçilen eşyaların NPC geri satış bedeli ' + CAST(@NewSellPrice AS VARCHAR(20)) + ' Gold yapıldı.'
Nasıl Uygulanır & Senkronize Edilir?
- SQL Server Management Studio (SSMS) programını açıp yukarıdaki sorguları çalıştırın.
- NPC paket fiyatları (
_RefPricePolicyOfItem) sunucu taraflıdır; anında geçerli olması için GameServer pencerelerini yeniden başlatmanız gerekir. - Eğer
SellPrice(Geri Satış) değerini güncellediyseniz, oyuncuların eşyayı çantalarından incelerken doğru satış bedelini görebilmeleri için Media.pk2 içerisindekiserver_dep\itemdata_xxx.txtdosyasında ilgili eşyanınSellPricesütununu da aynı rakama eşitleyip patch atmanız önerilir.
Sorularınızı ve özel coin fiyatlandırma taleplerinizi konu altından paylaşabilirsiniz. Herkese keyifli geliştirmeler!

