- #1
Konu Sahibi
: serkankacan
[QUERY] vSRO Tek Query ile Otomatik Battle Arena Saati Oluşturma
_Schedule Tablosu Üzerinden Hızlı ve Hatasız Battle Arena (Random) Saat Ayarlayıcı
_Schedule Tablosu Üzerinden Hızlı ve Hatasız Battle Arena (Random) Saat Ayarlayıcı
Merhaba değerli forum sakinleri,
vSRO sunucularında **Battle Arena** saatlerini ayarlamak, `_Schedule` tablosunun karmaşık sütun yapısı ve aralık hesaplamaları nedeniyle çoğu zaman yorucu olabilir. Birbiriyle senkronize çalışması gereken 3 farklı aşama (Eşleşme/Bildirim, Kayıt Açılışı ve Arena Başlangıcı) tek bir tabloda tutulur.
Aşağıda paylaşılan pratik SQL sorgusu sayesinde sadece hedeflediğiniz saat ve dakikayı değişkenlere girerek, gerekli tüm `_Schedule` satırlarını tek tıkla otomatik olarak ekleyebilirsiniz.
Önemli Uyarı' Alıntı:DİKKAT:
- Sorguyu çalıştırmadan önce SRO_VT_SHARD yedeğinizi almanız önerilir.
- Yeni saatlerin sunucuya yansıması için işlem tamamlandıktan sonra ShardManager ve GameServer modüllerinin yeniden başlatılması (Restart) gerekmektedir.
Zamanlama Mantığı Nasıl Çalışır?
Battle Arena'nın sağlıklı başlayabilmesi için sistemde 3 farklı `ScheduleDefineIdx` kaydının sırayla tetiklenmesi gerekir:
- Idx 14 (Bildirim & Ön Hazırlık): Arenanın başlayacağını duyuran ilk aşamadır. Arenanın fiili başlangıcından 15 dakika önceye ayarlanır.
- Idx 16 (Kayıtların Açılması): NPC üzerinden oyuncuların kayıt olmaya başladığı aşamadır. Arenanın fiili başlangıcından 10 dakika önceye ayarlanır.
- Idx 17 (Arenaya Çekilme & Başlangıç): Kayıtların kapandığı ve oyuncuların içeri aktarıldığı aşamadır. Arenanın başlamasından 5 dakika önceye ayarlanır.
Nasıl Kullanılır?
- SQL Server Management Studio (SSMS) programını açın.
- Üst kısımdan New Query penceresi oluşturun.
- Aşağıdaki SQL kodunu yapıştırın.
- En üstteki değişken alanlarına hedeflediğiniz arena saatinin öncesine denk gelen saat/dakika değerlerini yazın.
- F5 tuşuna basarak sorguyu çalıştırın.
- İşlem bitiminde ShardManager modülünü yeniden başlatın.
SQL Query Kodu
SQL:
USE SRO_VT_SHARD
GO
-- ==============================================================================================
-- BATTLE ARENA (RANDOM) SAAT AYARLAMA
-- Örnek Senaryo: Saat 19:30'da başlayacak bir Battle Arena için:
-- MatchSaat/Dakika : 19:15 (Başlangıçtan 15 dk önce)
-- KayitSaat/Dakika : 19:20 (Başlangıçtan 10 dk önce)
-- StartSaat/Dakika : 19:25 (Başlangıçtan 5 dk önce)
-- ==============================================================================================
DECLARE @MatchSaat INT = 19
DECLARE @MatchDakika INT = 15 -- Arenanın fiili başlangıcından 15 dakika önceki saat ve dakika
DECLARE @KayitSaat INT = 19
DECLARE @KayitDakika INT = 20 -- Arenanın fiili başlangıcından 10 dakika önceki saat ve dakika
DECLARE @StartSaat INT = 19
DECLARE @StartDakika INT = 25 -- Arenanın fiili başlangıcından 5 dakika önceki saat ve dakika
-- ==============================================================================================
-- 1. ADIM: Eşleşme ve Ön Bildirim Bildirisi (Idx 14 - Duration: 1800 sn)
-- ==============================================================================================
INSERT INTO SRO_VT_SHARD.dbo._Schedule (
ScheduleDefineIdx, DateStart, DateEnd, MainInterval_Type, MainInterval_TypeDate,
SubInterval_DayOfWeek, SubInterval_Days, SubInterval_Weeks, SubInterval_Months,
SubInterval_StartTimeHour, SubInterval_StartTimeMinute, SubInterval_StartTimeSecond,
SubInterval_DurationSecond, SubInterval_RepititionTerm, SubInterval_MaintainTime, Param, Description
) VALUES (
14, '2023-08-17 00:00:00.000', '2030-08-17 00:00:00.000', 1, 1,
0, 0, 0, 0,
@MatchSaat, @MatchDakika, 0,
1800, 0, 0, '', ''
)
-- ==============================================================================================
-- 2. ADIM: Kayıtların Açılışı (Idx 16 - Duration: 600 sn)
-- ==============================================================================================
INSERT INTO SRO_VT_SHARD.dbo._Schedule (
ScheduleDefineIdx, DateStart, DateEnd, MainInterval_Type, MainInterval_TypeDate,
SubInterval_DayOfWeek, SubInterval_Days, SubInterval_Weeks, SubInterval_Months,
SubInterval_StartTimeHour, SubInterval_StartTimeMinute, SubInterval_StartTimeSecond,
SubInterval_DurationSecond, SubInterval_RepititionTerm, SubInterval_MaintainTime, Param, Description
) VALUES (
16, '2023-08-17 00:00:00.000', '2030-08-17 00:00:00.000', 1, 1,
0, 0, 0, 0,
@KayitSaat, @KayitDakika, 0,
600, 0, 0, '', ''
)
-- ==============================================================================================
-- 3. ADIM: Arena Başlangıcı ve Alana Çekilme (Idx 17 - Duration: 900 sn)
-- ==============================================================================================
INSERT INTO SRO_VT_SHARD.dbo._Schedule (
ScheduleDefineIdx, DateStart, DateEnd, MainInterval_Type, MainInterval_TypeDate,
SubInterval_DayOfWeek, SubInterval_Days, SubInterval_Weeks, SubInterval_Months,
SubInterval_StartTimeHour, SubInterval_StartTimeMinute, SubInterval_StartTimeSecond,
SubInterval_DurationSecond, SubInterval_RepititionTerm, SubInterval_MaintainTime, Param, Description
) VALUES (
17, '2023-08-17 00:00:00.000', '2030-08-17 00:00:00.000', 1, 1,
0, 0, 0, 0,
@StartSaat, @StartDakika, 0,
900, 0, 0, '', ''
)
Geliştirici İpuçları:
- Eğer gün içerisine birden fazla saat eklemek istiyorsanız, en üstteki saat değişkenlerini değiştirip sorguyu tekrar çalıştırmanız yeterlidir.
- Tabloda daha önceden kalan çakışan saat kayıtları varsa, `SELECT * FROM _Schedule WHERE ScheduleDefineIdx IN (14, 16, 17)` sorgusu ile mevcut kayıtları listeleyip temizleyebilirsiniz.
Sorularınızı ve eklemek istediğiniz arena tiplerini (Party, Guild, Job) konu altından iletebilirsiniz. Herkese iyi forumlar!

