- #1
Konu Sahibi
: serkankacan
[REHBER & QUERY] vSRO Tüm Karakterlere Toplu İtem, Coin ve Hediye Gönderme
_ADD_ITEM_EXTERN ve _Char Tablosu Üzerinden Sunucudaki Tüm Oyunculara Otomatik Ödül Dağıtımı
_ADD_ITEM_EXTERN ve _Char Tablosu Üzerinden Sunucudaki Tüm Oyunculara Otomatik Ödül Dağıtımı
Merhaba değerli forum sakinleri,
Açılış etkinliklerinde, bayram/yılbaşı kutlamalarında veya telafi durumlarında sunucunuzdaki tüm aktif oyunculara tek tek uğraşmadan toplu olarak **Eşya (+ basılı veya düz)**, **Gold / Coin** veya **Silk** tanımlayabilirsiniz.
Aşağıda paylaşılan optimize edilmiş döngü; silinmiş karakterleri otomatik olarak atlar, çantasında boş yer olan karakterlere eşyayı güvenle tanımlar ve işlem esnasında veritabanı kilitlenmelerini önler.
Kritik Güvenlik Uyarısı' Alıntı:DİKKAT (İşlem Öncesi Kontroller):
- Bu işlemi yapmadan önce GameServer ve ShardManager modüllerinizi kapatmanız (veya sunucuyu bakım moduna almanız) şiddetle önerilir. Oyuncu oyundayken envanterine doğrudan eşya basılırsa GameServer bellek verisini geri yazarak eşyayı silebilir (Rollback).
- Karakterin çantasında boş yer (en az 1 slot) yoksa `_ADD_ITEM_EXTERN` prosedürü hata vermeden o karakteri otomatik olarak pas geçer.
- İşlem öncesinde mutlaka SRO_VT_SHARD yedeğinizi alınız.
1. YÖNTEM: Tüm Karakterlere Toplu İtem Gönderme
Sunucudaki tüm aktif karakterlere belirlediğiniz adette ve artı (+) seviyesinde eşya göndermek için:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- 1. ADIM: GÖNDERİLECEK EŞYA BİLGİLERİ
-- ===================================================================
DECLARE @ItemCodeName VARCHAR(128) = 'ITEM_MALL_GLOBAL_CHATTING' -- Gönderilecek Eşya Kodu
DECLARE @ItemCount INT = 11 -- Adet
DECLARE @ItemOptLevel INT = 0 -- Artı (+) Değeri
-- ===================================================================
-- 2. ADIM: TOPLU GÖNDERİM DÖNGÜSÜ
-- ===================================================================
DECLARE @MinID INT = (SELECT MIN(CharID) FROM dbo._Char WITH (NOLOCK) WHERE CharID > 0)
DECLARE @MaxID INT = (SELECT MAX(CharID) FROM dbo._Char WITH (NOLOCK))
DECLARE @CharName VARCHAR(16)
DECLARE @SentCount INT = 0
WHILE (@MinID <= @MaxID)
BEGIN
-- Sadece aktif ve silinmemiş karakterleri hedefle
IF EXISTS (SELECT 1 FROM dbo._Char WITH (NOLOCK) WHERE CharID = @MinID AND CharID > 0)
BEGIN
SELECT @CharName = CharName16
FROM dbo._Char WITH (NOLOCK)
WHERE CharID = @MinID
-- İtem Gönderimi
EXEC dbo._ADD_ITEM_EXTERN @CharName, @ItemCodeName, @ItemCount, @ItemOptLevel
SET @SentCount = @SentCount + 1
END
SET @MinID = @MinID + 1
END
PRINT '====================================================='
PRINT 'BAŞARILI: Toplam ' + CAST(@SentCount AS VARCHAR(10)) + ' karaktere eşya başarıyla tanımlandı!'
PRINT '====================================================='
2. YÖNTEM: Tüm Karakterlere Toplu Gold veya SP Ekleme
Eşya yerine tüm karakterlerin mevcut parasına veya SP havuzuna doğrudan ekleme yapmak isterseniz:
SQL:
USE [SRO_VT_SHARD]
GO
-- Tüm aktif karakterlere 100M Gold ve 500K SP ekler
UPDATE dbo._Char
SET
RemainGold = RemainGold + 100000000,
RemainSkillPoint = RemainSkillPoint + 500000
WHERE CharID > 0
PRINT 'Tüm karakterlere Gold ve SP başarıyla yüklendi.'
Nasıl Uygulanır?
- Oyun sunucunuzu bakıma alın veya GameServer pencerelerini kapatın.
- SQL Server Management Studio (SSMS) programını açın.
- Sol menüden SRO_VT_SHARD veritabanına sağ tıklayıp New Query deyin.
- Yukarıdaki SQL kodunu yapıştırın ve göndermek istediğiniz eşyanın kodunu (
@ItemCodeName), adedini ve artısını ayarlayın. - F5 tuşuna basarak çalıştırın.
- İşlem tamamlandıktan sonra GameServer'ı açıp oyuncularınızı davet edebilirsiniz.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

